Я не докерный мастер, но я понимаю, что это очень полезно, и мне нравится использовать его время от времени в некоторых проектах. Еще одна вещь, которую мне нравится, это дежопт и автоматизация, а в проекте у меня есть, мне не хватало этого. В предыдущей установке контейнер был построен и публиковать до Dockerhub с датой в качестве тега. Ницца, но не очень легко сейчас с версиями — «стабильные» и пожелания один «в процессе».
Этот пост о том, как я строю непрерывную интеграцию и решение непрерывного развертывания для моего проекта Docker. Весь код на Github и Docker Hub. . Я делюсь своим путешествием, чтобы другие могли наслаждаться этой автоматизацией и не проводить выходные, здание его.
Цель
К концу этой сборки будет два действия GitHub, чтобы построить и публиковать другую версию приложения на Docker Hub.
Версия выпуска: Каждый раз, когда выпуск опубликован на Github, тег контейнера с соответствующим номером версии будет построен и опубликован. (Ex: MyApp: v1)
Бета-версия: На каждом толчке в моей ветке на GitHub контейнер будет опубликован с определенным тегом. Тег будет соответствовать черному номеру версии выпуска с -бета
Отказ (Ex: MyApp: V2-Beta).
В этом посте приложение является Node.js Thitch Thatbot. Тип приложения не важен почтовый фокус на доставке.
Публикация версии выпуска
Каждый раз, когда выпуск опубликован на GitHub, рабочий процесс будет запущен. Сначала он будет восстановить «версию выпуска», затем создать и тег контейнер с ним и, наконец, опубликовать (aka push) его до docker Hub. Потому что «релиз» также является «стабильной» версией, она также обновит тег контейнера Последние
Отказ
Давайте посмотрим на полное определение ямла действия Github, и я сломаю его после.
name: Release Docker Image CI on: release: types: [published] jobs: update: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set outputs id: vars run: echo ::set-output name=RELEASE_VERSION::$(echo ${GITHUB_REF:10}) - name: Publish to Registry uses: elgohr/Publish-Docker-Github-Action@master with: name: ${{secrets.DOCKER_USER}}/cloudbot username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PASSWORD }} tags: "latest,${{ steps.vars.outputs.RELEASE_VERSION }}"
Чтобы ограничить, сколько раз рабочая процесс запускается, я использовал На: Выпуск
и Тип: Опубликовано
отрегулируйте, как вам нравится.
Следующая интересная часть — это линии на шаге Варс Отказ
- name: Set outputs id: vars run: echo ::set-output name=RELEASE_VERSION::$(echo ${GITHUB_REF:10})
Здесь я использую переменную среды Github_ref
(Striped из 10 первых символов содержит «Refs/Tags/») для инициализации локальной переменной Release_Version
Отказ Значение доступно от выходов этого шага, как на последней строке YAML.
tags: "latest,${{ steps.vars.outputs.RELEASE_VERSION }}"
От Шаги идентифицируется по ID варс Я извлек из Выходы Значение Release_Version
Отказ
В этом действии GitHub я использовал Elgohr/publish-docker-github-action @ Master Потому что это было просто и делал то, что мне нужно. Вы можете выполнить команды Docker напрямую, если вы предпочитаете или использовать Docker/Github-действия
.
Есть много вариантов, доступных из Github Marketplace Отказ
Публикация бета-версии
Каждый раз, когда нажимается на Github, рабочий процесс будет запущен. Сначала он извлечет «версию выпуска» самого последнего выпуска В проекте режима Отказ Рабочий процесс произойдет -бета
к восстановленной версии и используйте это, чтобы пометить контейнер. Наконец, опубликовать (aka push) его до docker Hub.
Еще раз, вот полный ямл, я сломаю его после.
name: Build Docker Images on: [push] jobs: build: name: cloudbot-beta runs-on: ubuntu-latest steps: - id: last_release uses: InsonusK/get-latest-release@v1.0.1 with: myToken: ${{ github.token }} exclude_types: "release, prerelease" view_top: 1 - uses: actions/checkout@v2 - name: Publish to Registry uses: elgohr/Publish-Docker-Github-Action@master with: name: ${{secrets.DOCKER_USER}}/cloudbot username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PASSWORD }} tags: "${{ steps.last_release.outputs.tag_name }}-beta"
Здесь сложность была то, что я хотел создать тег из «будущей» версии. Я решил использовать проекты релизов, потому что все не видны все, поэтому они похожи на будущее.
Если ваш последний выпуск — версия 1 (v1.0), чтобы сделать этот рабочий процесс возможно, вам нужно будет создать новый выпуск и сохранить его в Проект Отказ
Как и в рабочем процессе отпуска, мне нужно получить версию. Поскольку черновики видны только для некоторых людей, которые нам нужно будет получить доступ. Это легко делается с помощью github.taken
Отказ Те, которые создаются автоматически, когда начинается действие GitHub.
Затем используя шаг Insonusk/Get-Nay-Release Мы получим версию.
- id: last_release uses: InsonusK/get-latest-release@v1.0.1 with: myToken: ${{ github.token }} exclude_types: "release, prerelease" view_top: 1
На этот раз при прохождении значения для тега мы будем объединять «-бета» к нему.
tags: "${{ steps.last_release.outputs.tag_name }}-beta"
Упаковка
И VOILA, очень простой и простой в реализации CI-C CD для проекта контейнера. Есть много разных вариантов, с нетерпением ждем изучения того, как вы сделали?
Оригинал: «https://dev.to/fboucheros/how-to-create-a-continuous-integration-continuous-deployment-ci-cd-solution-for-a-docker-project-31ka»