我想创建一个 CI/CD 管道,其中
我不确定如何从步骤 3 过渡到步骤 4。我将能够构建映像并将其推送到 GCR,但是如何更新应用程序部署规范中的新映像标签,以及如何触发部署?
我也不确定目录结构。
目前,我正在考虑将 Kaniko 规范放在这里。
但这意味着我必须为此应用程序部署的规范创建一个新的存储库。这是有道理的,还是我处理这个问题的方式错误?
Argo CD 遵循
GitOps 模式,使用 Git 存储库 作为定义所需应用程序状态的事实来源。
由于您使用的是 GitHub,因此您需要在 GitHub 工作流程(操作)中定义您的管道 + 修改您的应用程序(k8s 文件)所在的清单文件 --> 这意味着您可以执行上述所有步骤(1 到 4)提到过。对于构建和推送步骤,我相信您需要一个 Actions Runner Controller (
ARC) 作为自托管运行器,这样您就可以触发您必须构建和推送图像的运行器。
# for e.g. in your Github workflow, you can use:
jobs:
build:
runs-on:
- self-hosted # required label to tigger your runner.
在 Kaniko 的官方文档中,我只能找到 GitLab CI 的示例,但你可以使用它来了解 GitHub 的想法。现在我们假设您有 GitHub 工作流程,该工作流程根据管道内的特定分支触发,您正在构建并推送图像,现在是时候更改 K8s 清单了,关于新图像标签。
另外,需要在 GitHub 工作流程中定义IMAGE_TAG
变量。
- name: Deploy to staging
run: |
sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64
sudo chmod a+x /usr/local/bin/yq
sudo git config --global url."https://${{ secrets.GIT_CLONE_SECRET }}@github.com".insteadOf "https://github.com"
sudo git clone https://<REPO_ADDRESS_OF_YOUR_HELM_CHARTS>
cd helm-charts # this part, is related to your repo structure
sudo yq -i eval '.image.tag = "${{ env.IMAGE_TAG }}"' <YOUR_PATH_TO_HELM_VALUES>/values.yaml
sudo git config user.email <YOUR_GIT_EMAIL_ADDRESS_HERE>
sudo git config user.name <YOUR_GIT_USERNAME_HERE>
sudo git add .
sudo git commit -m "image updated with ${{ env.IMAGE_TAG }}"
sudo git push origin master # CHANGE IT TO THE BRANCH YOUR K8S MANIFEST ARE.
关于您的目录和部署结构,ArgoCD 官方文档可以帮助您: