这个问题的理想解决方案是什么?

问题描述 投票:0回答:1

我想创建一个 CI/CD 管道,其中

  1. 开发人员将其代码推送到 Github 存储库。
  2. Github 操作运行单元测试,所有测试通过后,您就可以合并 PR。
  3. 在 K8s 集群上,argocd 部署会侦听此存储库上的更改。新合并后,它会触发构建过程。这是我的困惑:我希望 Kaniko 从这个存储库构建一个 docker 镜像,并将该镜像推送到运行 K8s 的 GCR。
  4. 一旦 Kaniko 构建成功,我想将 Helm Chart 图像版本更新为最新标签,然后通过 argocd 部署实际应用程序。

我不确定如何从步骤 3 过渡到步骤 4。我将能够构建映像并将其推送到 GCR,但是如何更新应用程序部署规范中的新映像标签,以及如何触发部署?

我也不确定目录结构。

目前,我正在考虑将 Kaniko 规范放在这里

但这意味着我必须为此应用程序部署的规范创建一个新的存储库。这是有道理的,还是我处理这个问题的方式错误?

github-actions continuous-deployment continuous-delivery argocd kaniko
1个回答
0
投票
您的问题包含不同的主题,因此很难在这里涵盖所有主题。我将尝试解决其中的大多数问题。 Argo CD,顾名思义,只能处理CD部分。 Argo CD 是 Kubernetes 的声明式 GitOps 持续交付工具。

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 的想法。

[LINK]

现在我们假设您有 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 官方文档可以帮助您:

LINK

© www.soinside.com 2019 - 2024. All rights reserved.