Как настроить Flux для развертывания последнего тега изображения для каждой сборки?

Я добавил действия GitHub для создания образа Docker для каждого последнего коммита и отправки его в наш реестр контейнеров в Azure.

Мы создали файлы yaml для развертывания образа Docker в Kubernetes в Azure. И развернул Flux для автоматической синхронизации в случае каких-либо изменений в файлах yaml.

Как настроить Flux для получения последнего образа из реестра контейнеров при выходе новой сборки?

1 ответ

Здесь описывается решение, при котором вы храните файлы yaml в репозитории GitHub отдельно от репозитория, в котором хранится код вашего проекта. Итак, два репозитория:

  1. Репозиторий проекта на GitHub
  2. Репозиторий инфраструктуры GitHub (IaC)

Я предполагаю, что Flux затем указывает на репозиторий инфраструктуры, чтобы при внесении там изменений Flux приводил кластер в соответствие с желаемыми изменениями, которые теперь объявлены в репозитории. (Мы используем ArgoCD). Когда вы вносите изменения в репозиторий проекта, действие GitHub создает новый образ (с новым тегом) и отправляет его в реестр контейнеров Azure.

Затем вы спрашиваете, как сообщить инструменту CI/CD (т. е. Flux) о новом теге изображения, чтобы он мог получить свежее изображение.

Рекомендуется рассмотреть возможность использования Kustomize для управления обновлением тега в репозитории инфраструктуры, чтобы инструмент CI/CD автоматически обнаруживал это изменение в репозитории и соответствующим образом обновлял кластер, используя новый образ.

Для этого потребуется следующее:

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

      apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- resource1.yaml
- resource2.yaml
- ...

images:
- name: image-name in your deployment manifest
  newTag: to-be-replaced

Затем в рабочем процессе действий GitHub в репозитории проекта используйте действие action/checkout@v2, чтобы получить удаленный репозиторий инфраструктуры. Затем добавьте действие imranismail/setup-kustomize@v1 и используйте его для замены вкладки изображения. Затем отправьте изменения обратно в репозиторий инфраструктуры. Пример ниже, измените в соответствии с вашей ситуацией:

      build steps here

deploy:
  needs: build
  runs-on: ubuntu-latest

  steps:
  - name: Checkout remote repo
    uses: actions/checkout@v2
    with:
      repository: {your github repo}
      token: ${{ secrets.INFRA_REPO_TOKEN }}
      path: infra-repo

  - name: Setup Kustomize
    uses: imranismail/setup-kustomize@v1
    with:
      kustomize-version: "3.6.1"

  - name: Switch out image tag
    run: |
      cd infra-repo/{repo name}
      kustomize edit set image {image name}:{tag}

  - name: Commit and push
    run: |
      cd infra-repo/{repo name}
      git config --local user.email github-actions@github.com
      git config --local user.name github-actions
      git commit -am "updates image tag"
      git push

Эти соответствующие ссылки также должны предоставить вам информацию, необходимую для правильного построения рабочего процесса:

Другие вопросы по тегам