Этот пост был первоначально опубликован в thbe.org .
Мой традиционный трубопровод CI/CD, который я использовал до сих пор, было в первую очередь комбинация Github В сочетании с Travisci Отказ Эта комбинация для меня работала довольно хорошо, но имела некоторые недостатки. Исходя из того, что я использую Pro Account на Гадость Я должен иметь дело с государственными и частными репозиториями. К сожалению, трубопровод работает только с публичными репозиториями GitHub, а не с частными репозиториями GitHUB. Кроме того, способ, которым я обращался с секретами/паролями, которые требуются в конвейере CD для развертывания кода на стороннюю платформу, не были на самом деле не удовлетворяют мне, что было полностью ручной и требует личного оборудования. Однако, когда я увидел, что Github представил Действия Я думал, что стоит попробовать проверить это и немного играть с новым конвейером CI/CD. В следующей статье я поделись своим опытом с действиями GitHub, а также то, что хорошо и athnot.
Согласно GitHub, действия должны автоматизировать ваш рабочий процесс от идеи к производству. Звучит хорошо и это то, что я искал. Но описание чего-то на рекламной странице выглядит, на самом деле, скорее всего, несколько разных. Поэтому я выбрал один из более сложных репозиториев, которые я использую, которые не работали раньше и пытались установить конвейер CI/CD на основе действий GitHub. Кандидат, который я выбрал, был мой сайт , точнее, инструменты, которые я использую для создания моего веб-сайта. Как я уже опубликовал ранее, я использую Jekyll построить мой сайт. Все необходимые действия для создания и тестирования моего сайта собираются в RakeFile на основе Ruby. Например, когда мой сайт скомпилирован, я бегаю HTML-Корректор Чтобы проверить HTML-код. Дополнительная сложность была добавлена тем фактом, что мой репозиторий сайта является частным из-за некоторых частей, которые мне нужно реформировать сначала, прежде чем я смогу выпустить код.
Первое, что требуется, это файл рабочего процесса. Вам необходимо создать каталог, называемый. Github/WorksPlows в вашем корневом проекте. Внутри этого каталога вы должны создать файл yaml. В моем случае я назвал первый файл Development.yml Но вы можете назвать его так, как вам нравится, пока файл заканчивается «.yml». Этот файл содержит задание и связанные с ними действия. Теплопровод сборки будет выполняться для проверки и развертывания кода. Следующий файл содержит CI частью истории, это означает, что она строит сайт и проверяет его для ошибок:
name: Development Workflow on: [push] jobs: test: name: CI Pipeline runs-on: ubuntu-latest steps: - name: Checkout master uses: actions/checkout@v1 - name: Set up Ruby 2.6 uses: actions/setup-ruby@v1 with: ruby-version: 2.6.x - name: Setup bundler and required gems run: | gem install bundler bundle install --jobs 4 --retry 3 - name: Build and test the website run: bundle exec rake
Итак, что именно происходит в файле конфигурации? Первое ключевое слово определяет имя рабочего процесса:
Второе ключевое слово «ON» определяет, что рабочий процесс должен быть выполнен каждый раз, когда я нажимаю код в мой репозиторий GitHub. Ключевое слово «Jobs» описывает, что должно быть выполнено в рабочем процессе. Вы можете определить одну или несколько рабочих мест, в зависимости от того, что вы хотите выполнить.
Первая версия файла Development.yml, которую я показал, прежде чем запускает контейнер на основе Ubuntu-Neighle. После запуска контейнера файл конфигурации определяет четыре действия, которые должны быть выполнены внутри контейнера Ubuntu. Первое действие, которое происходит, — это проверка моего текущего хранилища GIT. Второе действие состоит в том, чтобы настроить Ruby с версией 2.6. Действие номер три Настройка требуемых пакетов Ruby на основе драгоценного файла в моем корневой репозитории. Когда эти три действия были выполнены, четвертое действие может выполнять эффективное испытание моего веб-сайта на основе RakeFile, которое также определяется в моем корневой репозитории GIT.
Как только действия будут выполнены, вы можете увидеть результат на вкладке Действия:
Вы можете использовать треугольник, чтобы расширить выполненные шаги, чтобы подробно увидеть журналы.
Как только сценарий CI был настроен для тестирования изменений на веб-сайте, пришло время настроить часть CD для развертывания QA. Итак, что мы пытаемся достичь? Легко говоря, когда GIT Commit прошел все необходимые тесты, которые я хотел бы загрузить сгенерированный сайт в мой тест-арендатор. Это немного сложно. Я уже писал в своем первом посте о действиях GitHub, что мой сайт не размещен где-то в пространстве GitHub, вместо этого он проводится сторонним провайдером в моей области веб-пространства. Сторонний провайдер предлагает опцию SFTP для загрузки данных сайта. Это совершенно хорошо, когда часть загрузки выполняется вручную, но не так просто, когда инструмент CD должен выполнить загрузку. К счастью, действия GitHub есть варианты для этого. Но прежде чем мы начнем с этого, давайте посмотрим на то, как My Dogining.yml теперь смотрится с частью CD, включенной:
name: Development Workflow on: [push] jobs: test: name: CI Pipeline runs-on: ubuntu-latest steps: - name: Checkout master uses: actions/checkout@v1 - name: Set up Ruby 2.6 uses: actions/setup-ruby@v1 with: ruby-version: 2.6.x - name: Setup bundler and required gems run: | gem install bundler bundle install --jobs 4 --retry 3 - name: Build and test the website run: bundle exec rake deploy: name: CD Pipeline QA needs: test runs-on: ubuntu-latest steps: - name: webfactory/ssh-agent uses: webfactory/ssh-agent@v0.1.1 with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - name: Checkout master uses: actions/checkout@v1 - name: Set up Ruby 2.6 uses: actions/setup-ruby@v1 with: ruby-version: 2.6.x - name: Set up lftp run: sudo apt-get install lftp -y - name: Setup bundler and required gems run: | gem install bundler bundle install --jobs 4 --retry 3 - name: Build and deploy the website to QA run: bundle exec rake deploy:qa env: SSH_DEPLOY_SERVER: ${{ secrets.SSH_DEPLOY_SERVER }} SSH_DEPLOY_USER: ${{ secrets.SSH_DEPLOY_USER }}
По сравнению с исходным ямлем я описал в моем прежнем посте, вы могли бы заметить, что добавил вторую работу под названием развертывание. Действия в этой работе почти таки, как в тестовой работе. Эта работа также должна создать новый контейнер Ubuntu, он должен установить Ruby и Gems, необходимые для создания моего сайта Jekyll. Две вещи, однако, отличаются от задания испытаний, первая — это действие, называемое «WebFactory/SSH-Agent», второй — это развертывание действия, которое использует специальную среду. Начнем со второго, как уже упоминалось, я использую специальную среду для этого действия. Обоснование за этим является то, что мне нужно пройти цель и учетные данные для развертывания сгенерированного сайта к этой цели. Для достижения этого я создал три секрета в секретной зоне репозитория GitHub:
В конце консервации эти секреты являются «только» переменными, которые будут доступны в контейнере, который начинается с действиями GitHub. Тем не менее, это отсутствующая функция для генерации сценариев развертывания без хранения секретов в коде, который нажата в GitHub. Вместо этого секреты хранятся за пределами контейнера в безопасной зоне в GitHub, готовом для использования в каждом развертывании. В деталях это означает, что я использую переменные среды в моем RakeFile, чтобы определить цель, где я хотел бы развернуть сгенерированный сайт, а также пользователь, который следует использовать для развертывания. В принципе, возможно бы также развернуть пароль с таким образом, но вместо этого принял решение использовать криптографический ключ.
Для меня облегчают все, что я использовал предварительно определенное действие, называемое SSH-агент Отказ Это действие читает криптографический ключ, хранящийся в SSH_PRIVATE_KEY и добавляет его в SSH-агент, установленный в контейнере. С помощью этого механизма на месте я могу развернуть сгенерированный код сайта с помощью входа паролем.
Последнее, но не в последнюю очередь, мне нужно развернуть сгенерированный код сайта к моей производственной среде, по крайней мере, когда я доволен результатами от развертывания QA. До сих пор триггер для начала развертывания был нажатой коммит. Когда мы говорим о продуктивном развертывании, имеет смысл ввести другой флаг, который должен быть установлен, прежде чем что-то развернуто для производства. К счастью, здесь приходит Git в игре. Git позволяет нам пометить конкретный коммит. Помечая конкретный коммит определенным образом — это флаг, который я использую для развертывания производства. Здесь вы видите release.yml, который я использую для моих развертываний производства:
name: Release Workflow on: push: tags: - "v*" # Push events to matching v*, i.e. v1.0 jobs: deploy: name: CD Pipeline PRD needs: test runs-on: ubuntu-latest steps: - name: webfactory/ssh-agent uses: webfactory/ssh-agent@v0.1.1 with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - name: Checkout master uses: actions/checkout@v1 - name: Set up Ruby 2.6 uses: actions/setup-ruby@v1 with: ruby-version: 2.6.x - name: Set up lftp run: sudo apt-get install lftp -y - name: Setup bundler and required gems run: | gem install bundler bundle install --jobs 4 --retry 3 - name: Build and deploy the website to PRD run: bundle exec rake deploy:production env: SSH_DEPLOY_SERVER: ${{ secrets.SSH_DEPLOY_SERVER }} SSH_DEPLOY_USER: ${{ secrets.SSH_DEPLOY_USER }}
Самое главное — это теги «ON -> Push ->». Я до сих пор развернут с помощью Push-мероприятия, но только в том случае, если коммит помечен, начиная с «V». Поэтому, когда я помечу свой коммит как «V1.0.2», он будет автоматически толкнут на производство. Даже лучшая часть этого решения в том, что мне не нужна особая среда разработки, чтобы подтолкнуть коммит к производству, его можно полностью сделать из веб-интерфейса GitHub. Для этого вам нужно перейти на вкладку выпусков вашего кода:
Создать релиз, например v1.0.0:
Как только тег версии нажата на платформу GitHub, начинается цельная цепь CI/CD. Это означает, что разработка.имл и выброс. Наручаются инструкции в параллельном и, когда все прошло хорошо, и никаких ошибок не обнаружена, веб-сайт проходит прямо в производство:
Выпуск автоматически создает соответствующую тег:
Это триггеры, наконец, весь CI/CD-трубопровод:
И, наконец, все в производстве, как планировалось:
Я надеюсь, что вы наслаждались моими тремя сообщениями о том, как настроить и как использовать действия GitHub. До сих пор я вполне удивлен, как работает безупречно и хороший CI/CD-трубопровод, и я не нашел никаких основных предупреждений, которые не позволяют мне использовать действия GitHub. Я уже очень хочу мигрировать некоторые из моих других репозиториев, чтобы получить больше внутри, что возможно на действиях GitHub и attnot, но на данный момент, вот и все, что я мог сказать. Я буду держать вас в курсе, когда я мигрировал больше проектов.
Оригинал: «https://dev.to/thbe/ci-cd-with-github-actions-iji»