Рубрики
Uncategorized

Ускорение угловой скалисты

В этой статье мы узнаем, как вы сможете ускорить свои сборки Скалли, повторно используя угловую сборку … Tagged Github, Action, Angular, DevOps.

В этой статье мы узнаем, как вы сможете ускорить свои строительники Скалли, повторно используя угловые артефакты в действиях GitHub. Чтобы статически построить свой угловой веб -сайт со Scully, сначала вам нужно сделать угловую сборку, а затем использовать артефакты сборки для создания статически генерируемого сайта с использованием Scully.

Для большинства веб -сайтов это часто, этот контент может измениться без изменения исходного кода вашего веб -сайта. Следовательно, может быть расточительно запускать угловую сборку каждый раз, когда изменяется контент вашего сайта.

Обычно, угловые строительные времена приличное. Но из -за ряда факторов угловые сборки могут замедлиться, как в моем случае, продувка CSS против Tailwindcss продлевает время сборки до более чем 7 минут. Добавьте все остальное вместе, и мои действия GitHub зайдут более 12 минут.

Использование выпусков GitHub

Во -первых, нам понадобится место для хранения наших угловых артефактов. GitHub Выпуски это хороший способ, так как он позволяет вам иметь долгосрочное хранение ваших артефактов, которые вы можете использовать в любое время. Это в сочетании с NPM версия означает, что у вас есть свои функции; Вы можете сократить релиз, который будет использоваться последующими сборками, поскольку вы продолжаете работать над другими функциями и/или улучшениями.

Таким образом, мы собираемся построить наш рабочий процесс, чтобы иметь две работы, первая работа позаботится о создании нашего углового приложения, а также о выпуске и загрузке наших артефактов сборки в релиз. В то время как вторая работа позаботится о создании Scully, используя последние артефакты, хранящиеся в выпусках GitHub, и публикует наш веб -сайт на нашу хостинговую платформу.

Всякий раз, когда в репозиторий добавляется новый тег, мы создадим релиз с версией №. из тега и загрузите наши угловые сборки в этот релиз.

Создание наше угловое приложение

Слушая теги

Во -первых, нам нужно будет запустить наш рабочий процесс GitHub каждый раз, когда создается новый тег. Мы будем использовать теги для создания версии выпуска. Это позволит нам использовать NPM версия Чтобы создать новые артефакты сборки для нас для использования во время процесса публикации.

on:
  push:
    tags:
      - "*"

NB: В разделе «Публикация нашего блога» мы изменим этот раздел, чтобы прослушать Repository_dispatch , который мы будем использовать с Webhooks, чтобы запустить рабочий процесс, когда происходят события вне нашего репозитория, как опубликовано в блоге, вы можете узнать больше Здесь Анкет

Мы ограничим эту задачу, чтобы запустить только тогда, когда новый тег создается с использованием Startswith (github.ref, 'refs/tags/') . Это позволит нам использовать один и тот же файл рабочего процесса для построения и публикации, причем они будут двумя отдельными заданиями.

jobs:
  build:
    if: startsWith(github.ref, 'refs/tags/')
    runs-on: ubuntu-latest

Установка пакетов NPM

Затем нам нужно будет установить пакеты NPM, прежде чем мы сможем построить наше угловое приложение. В этом случае мы используем пряжа Но не стесняйтесь использовать свой любимый менеджер пакетов. Мы начнем с проверки (GIT Checkout) Наш репозиторий. После этого мы затем настроим Nodejs и, наконец, запустите установку пряжи для установки наших пакетов NPM.

steps:
  - uses: actions/checkout@v1
  - name: Setup Node
    uses: actions/setup-node@v1
    with:
      node-version: 12.x
  - name: yarn install
    run: yarn install

Строительство углового проекта

И тогда мы можем добавить шаг, чтобы запустить Сборка пряжи: Prod Чтобы построить наше угловое приложение в производстве.

- name: yarn build
  run:  yarn build:prod

Создание артефактов выпуска и загрузки

Теперь, когда мы построили наш проект, мы собираемся сделать две вещи дальше. Мы застегнем застегивание артефактов сборки, а затем создадим релиз и загружаем наш артефакт Zipp в релизы. Мы будем использовать Papeloto/Action-Zip Действие, чтобы застегнуть файлы:

- uses: papeloto/action-zip@v1
  with:
    files: "./dist/webapp/"
    dest: webapp.zip

Заменить WebApp с выходным каталогом вашего углового проекта сборка.

А потом мы собираемся создать релиз GitHub и загрузить вышеуказанный артефакт на Zipd в релиз GitHub. Мы будем использовать Ncipollo/Action Action Action , чтобы выполнить это, как показано ниже.

- name: Push Build to Releases
  uses: ncipollo/release-action@v1
  with:
    artifacts: "webapp.zip"
    token: ${{ secrets.GITHUB_TOKEN }}

Вот что выглядит наш рабочий процесс:

name: Release a new Version

on:
  push:
    tags:
      - "*"

jobs:
  build:
    if: startsWith(github.ref, 'refs/tags/')
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1

      - name: Setup Node
        uses: actions/setup-node@v1
        with:
          node-version: 12.x

      - name: yarn install
        run: yarn install

      - name: yarn build
        run:  yarn build:prod

      - uses: papeloto/action-zip@v1
        with:
          files: "./dist/webapp/"
          dest: webapp.zip

      - name: Push Build to Releases
        uses: ncipollo/release-action@v1
        with:
          artifacts: "webapp.zip"
          token: ${{ secrets.GITHUB_TOKEN }}

Строительство Скалли и издательский блог

Далее мы собираемся добавить вторую работу — публикация — Это будет загружать наши угловые артефакты из нашего последнего релиза, запустить Scully Build и загрузить артефакты на нашу хостинговую платформу.

Во -первых, нам нужно будет послушать ON Repository_dispatch Поскольку именно так мы запустим наш веб -сайт восстановления, когда контент на нашем CMS изменится, как объяснено Здесь Анкет Не стесняйтесь использовать любые другие триггеры действия GitHub, подходящие для вашей системы управления контентом, то есть на Push to Master в каталоге блога, если вы используете Markdown.

on:
  push:
    tags:
      - "*"

  repository_dispatch:
    types:
      - publish_blog

Далее мы собираемся создать работу публикации, которая будет работать после работы по сборке, но если работа по сборке не будет выполнена, она в любом случае будет работать. Мы будем использовать if: всегда () Условие для запуска работы, даже если сборка нет. Это запустит работу публикации, если будет опубликовано новое сообщение в блоге, которое пропустит работу сборки, но также и когда будет сделан новый релиз, и в этом случае вы хотите, чтобы веб -сайт был опубликован с выпущенными изменениями.

Единственным недостатком этого подхода является то, что работа публикации будет работать, даже если работа построения не сработает.

publish:
  runs-on: ubuntu-latest
  needs: [build]
  if: always()

Далее нам нужно будет настроить узел и запустить Установка пряжи Чтобы установить пакеты NPM, так как Scully требует оба для работы.

steps:
  - uses: actions/checkout@v1
  - name: Setup Node
    uses: actions/setup-node@v1
    with:
      node-version: 12.x
  - name: yarn install
    run: yarn install

После этого мы собираемся скачать наш артефакт сборки, который мы загрузили в релиз GitHub — webapp.zip — и раскрипировать содержание в Dist/WebApp каталог. Чтобы загрузить артефакт из релиза Github, мы будем использовать dsaltares/fetch-gh-release-asset действие.

- uses: dsaltares/fetch-gh-release-asset@master
  with:
    repo: "USERNAME/REPOSITORY"
    version: "latest"
    file: "webapp.zip"
    target: "webapp.zip"
    token: ${{ secrets.GITHUB_PAT }}

NB: Для частного репозитория вам понадобится личный доступ GitHub Токен (PAT) По крайней мере, с org: крюк объем. Узнайте больше Здесь Анкет

Далее мы создадим каталог, чтобы поместить артефакты Angular WebApp, а затем расслабиться webapp.zip который мы скачали из выпусков GitHub.

- name: create dist directory
  run: mkdir -p dist/webapp

- name: Decompress
  uses: TonyBogdanov/zip@1.0
  with:
      args: unzip -qq ./webapp.zip -d ./dist/webapp

И, наконец, беги пряжа Скалли Для статической генерации сайта нашего углового приложения:

- name: Run scully
  run: yarn scully

Теперь мы можем развернуть артефакт Scully Build на ваш сайт. В этом случае мы будем использовать хостинг Firebase, который вы можете сделать, как показано ниже.

- name: deploy firebase webapp
  uses: w9jds/firebase-action@master
  with:
    args: deploy --only hosting
  env:
    FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

А теперь наш последний рабочий процесс действия GitHub выглядит так:

name: Publish Blog

on:
  push:
    tags:
      - "*"

  repository_dispatch:
    types:
      - publish_blog
      - build_site

jobs:
  build:
    if: startsWith(github.ref, 'refs/tags/')
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v1

      - name: Setup Node
        uses: actions/setup-node@v1
        with:
          node-version: 12.x

      - name: yarn install
        run: yarn install

      - name: yarn build
        run:  yarn build:prod

      - uses: papeloto/action-zip@v1
        with:
          files: "./dist/webapp/"
          dest: webapp.zip

      - name: Push Build to Releases
        uses: ncipollo/release-action@v1
        with:
          artifacts: "webapp.zip"
          token: ${{ secrets.GITHUB_TOKEN }}

  publish:
    runs-on: ubuntu-latest
    needs: [build]
    if: always()

    steps:
      - uses: actions/checkout@v1

      - name: Setup Node
        uses: actions/setup-node@v1
        with:
          node-version: 12.x

      - name: yarn install
        run: yarn install

      - uses: dsaltares/fetch-gh-release-asset@master
        with:
          repo: "[USERNAME]/[REPO]"
          version: "latest"
          file: "webapp.zip"
          target: "webapp.zip"
          token: ${{ secrets.GITHUB_PAT }}

      - name: create dist directory
        run: mkdir -p dist/webapp

      - name: Decompress
        uses: TonyBogdanov/zip@1.0
        with:
            args: unzip -qq ./webapp.zip -d ./dist/webapp

      - name: Run scully
        run: yarn scully

      - name: deploy firebase webapp
        uses: w9jds/firebase-action@master
        with:
          args: deploy --only hosting
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

Вывод

В этой статье мы рассмотрели, как мы можем оптимизировать наше время Скалли, разделяя угловые сборки и сборки Скалли, где мы храним наши угловые сборки и повторно используют артефакты в будущих сборках Скалли.

Это может не потребоваться для вашего приложения, если вы не используете такие инструменты, как чистка CSS для удаления неиспользованных CSS, поскольку угловые сборки обычно быстрые для приложений малого и среднего размера.

Есть несколько вещей, которые я пропустил, как кэширование зависимостей NPM, которые могут сбросить еще несколько секунд от вашего времени сборки, и я настоятельно рекомендую вам реализовать следующие инструкции Здесь Анкет

Ссылки

  • Используйте Webhooks, чтобы запустить действия GitHub — Ссылка Анкет
  • Начало работы со Скалли — Ссылка Анкет
  • Начало работы с действиями GitHub — Ссылка Анкет
  • О выпусках GitHub — Ссылка Анкет
  • Angular CDK — модуль платформы — Ссылка Анкет

Оригинал: «https://dev.to/this-is-learning/speeding-up-angular-scully-builds-in-github-actions-559g»