作者:周靖峰,青云科技容器顾问,云原生爱好者,目前专注于 DevOps,云原生领域技术涉及 Kubernetes、KubeSphere、Argo。
背景
KubeSphere v3.3.0 引入了 Argo CD,可以直接通过内置的方式实现 GitOps,不需要额外安装,并且在 UI 上也适配了基本功能。
今天就来介绍下如何通过 KubeSphere 3.4.0 内置的 Argo CD 实现持续交付。
文章涉及内容
- 通过 KubeSphere DevOps Jenkins 实现 CI 能力
- 通过 KubeSphere DevOps Argo CD 实现 CD 能力
- Jenkins + Argo CD 的持续交付
Jenkins 配置
准备一个 git 仓库信息,这里提供的示例 demo 为:https://github.com/Feeeenng/devops-maven-sample。
项目目录信息:
项目目录信息包含 Jenkinsfile-argo,Dockerfile 等构建信息。
这里主要介绍一下 Jenkinsfile-argo 文件的 pipeline 重要步骤。
agent 部分
由于内置的 agent 镜像版本没有加入 kustomize
部署工具,并且我们在整个 CI/CD 的构建流水线当中,使用了此工具,所以引入了一个自己的定制版本。
agent {
kubernetes {
inheritFrom 'maven'
containerTemplate {
name 'maven'
image 'feeeng/builder-maven:v3.4.0'
}
}
}
CI 更新部分
stage('update mainfast') {
when{
branch 'master'
}
steps {
// input(id: 'deploy-to-dev', message: 'deploy to dev?')
script {
container ('maven') {
withCredentials([usernamePassword(credentialsId: "$GITHUB_CREDENTIAL_ID", passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {
def encodedPassword = URLEncoder.encode("$GIT_PASSWORD",'UTF-8')
def encodedUsername = URLEncoder.encode("$GIT_USERNAME",'UTF-8')
sh """
git config --global user.email "kubesphere-cd@yunify.com"
git config --global user.name "kubesphere-cd"
git config --local credential.helper "!f() { echo username=\$GIT_USERNAME; echo password=\$GIT_PASSWORD; }; f"
cd deploy/dev/
kustomize edit set image $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:latest=$REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BRANCH_NAME-$BUILD_NUMBER
git add .
git commit -m "images update for dev $BUILD_NUMBER"
git push origin HEAD:master
"""
}
}
}
}
}
这里引入了 git 的配置信息,通过 step3 当中更新了镜像 tag 以后,通过 kustomize
工具进行镜像文件 tag 的替换,并且自动更新 git 信息。从而实现后面让 Argo CD 监听 git 变化做准备。
KubeSphere 配置
凭证配置
在 DevOps 流水线凭证界面当中,配置好对应的流水线所需要的凭证信息包含:
- dockerhub-id 镜像仓库信息
- github-id git 仓库信息
- demo-kubeconfig 发布集群配置
Jenkins 配置
创建一条多分支流水线,配置对应的分支跟流水线文件。
通过 Jenkins 发现流水线的文件就会自动运行我们的 CI 步骤。
并且这里也自动使用我们刚才配置的 git 信息动态的更新了镜像 tag。
至此,Jenkins 配置部分完毕。整个流程全部是通过 pipeline 来完成。
Argo CD 配置
选择 DevOps 项目中的持续发布,配置集群跟项目界面。
下一步以后配置我们的代码仓库,部署的分支,部署文件的清单目录。
- 代码仓库
如果代码仓库下拉没有选择的话,需要在代码仓库界面中进行添加。
- 部署分支
选择我们需要部署的分支代码,这里我选择 master。
- 清单文件
这里是我们部署文件路径,因为采用 kustomize
进行部署,这里我们选择对应的路径即可。
Argo CD 同步策略配置。
这里跟 Argo CD 同步策略一样,只是做了中文翻译跟可视化,所以看起来也比较顺手。
这里我们选择自动同步策略,选择对应的同步资源策列,然后 Argo CD 就会自动进行同步触发。
创建完毕以后,展现的效果图。
点击详情以后,就会发现应用已经开始自动进行同步。
然后通过找到我们对应部署的项目,就会发现已经自动进行部署成功。
通过上述的配置完成以后,我们就实现了基于 Jenkins + ArgoCD 的持续化交付。
CI 方面交由给 Jenkins 来处理,而 CD 就采用 GitOps 的方式实现。
后续规划
多集群发布
目前我们完成了基于 Jenkins + Argo CD 的单集群持续发布,未来面对环境较多且复杂场景,需要考虑如何实现多集群的发布。
可观测性
目前 KubeSphere 的链路追踪主要是通过 Istio 方式实现,而本身的普通应用无法进行链路追踪,后续可以通过 SkyWalking 来进行链路追踪的观测性。
容器调试
目前的构建体系,需要每次等待容器构建完毕,跑完整个流水线才能开始测试代码,并且在此期间也无法对代码进行调试,出了问题也只能重新在花费一段时间构建在进行测试。未来也会考虑如何在流水线中进行本地的容器调试能力。