helm在CICD中的应用
一:文档
https://docs.gitlab.com/runner/install/kubernetes.html
二:架构
三:流程
- 1. 开发人员提交代码到 Gitlab 代码仓库
- 2. 通过 Gitlab 配置的 Jenkins Webhook 触发 Pipeline 自动构建
- 3. Jenkins 触发构建任务,根据 Pipeline 脚本定义分步骤构建
- 4. 先进行代码静态分析,单元测试
- 5. 然后进行 Maven 构建(Java 项目)
- 6. 根据构建结果构建 Docker 镜像
- 7. 推送 Docker 镜像到 Harbor 仓库
- 8. 触发更新服务阶段,使用 Helm 安装/更新 Release
- 9. 查看服务是否更新成功。
四:CICD
Clone 代码 -> 代码静态分析 -> 单元测试 -> Maven 打包 -> Docker 镜像构建/推送 -> Helm 更新服务。
五:pipeline
def label = "slave-${UUID.randomUUID().toString()}"
podTemplate(label: label, containers: [
containerTemplate(name: 'maven', image: 'maven:3.6-alpine', command: 'cat', ttyEnabled: true),
containerTemplate(name: 'docker', image: 'docker', command: 'cat', ttyEnabled: true),
containerTemplate(name: 'kubectl', image: 'cnych/kubectl', command: 'cat', ttyEnabled: true),
containerTemplate(name: 'helm', image: 'cnych/helm', command: 'cat', ttyEnabled: true)
], volumes: [
hostPathVolume(mountPath: '/root/.m2', hostPath: '/var/run/m2'),
hostPathVolume(mountPath: '/home/jenkins/.kube', hostPath: '/root/.kube'),
hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock')
]) {
node(label) {
def myRepo = checkout scm
def gitCommit = myRepo.GIT_COMMIT
def gitBranch = myRepo.GIT_BRANCH
stage('单元测试') {
echo "测试阶段"
}
stage('代码编译打包') {
container('maven') {
echo "打码编译打包阶段"
}
}
stage('构建 Docker 镜像') {
container('docker') {
echo "构建 Docker 镜像阶段"
}
}
stage('运行 Kubectl') {
container('kubectl') {
echo "查看 K8S 集群 Pod 列表"
sh "kubectl get pods"
}
}
stage('运行 Helm') {
container('helm') {
echo "查看 Helm Release 列表"
sh "helm list"
}
}
}
}