Как настроить Flux для развертывания последнего тега изображения для каждой сборки?
Я добавил действия GitHub для создания образа Docker для каждого последнего коммита и отправки его в наш реестр контейнеров в Azure.
Мы создали файлы yaml для развертывания образа Docker в Kubernetes в Azure. И развернул Flux для автоматической синхронизации в случае каких-либо изменений в файлах yaml.
Как настроить Flux для получения последнего образа из реестра контейнеров при выходе новой сборки?
1 ответ
Здесь описывается решение, при котором вы храните файлы yaml в репозитории GitHub отдельно от репозитория, в котором хранится код вашего проекта. Итак, два репозитория:
- Репозиторий проекта на GitHub
- Репозиторий инфраструктуры 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
Эти соответствующие ссылки также должны предоставить вам информацию, необходимую для правильного построения рабочего процесса: