0
点赞
收藏
分享

微信扫一扫

cicd 02--构建通用的CD流程


cicd 02--构建通用的CD流程

  • ​​1 介绍​​
  • ​​2 CD 构建过程​​
  • ​​2.1 参数配置说明​​
  • ​​2.2 pipeline 脚本​​
  • ​​2.3 测试流程​​
  • ​​3 注意事项​​
  • ​​4 说明​​

1 介绍

笔者在 ​​cicd 01–构建通用的CI流程​​ 中介绍了一个通用的docker 镜像build 和 发布的流程,基于该流程继续构建一个通用的服务发布流程,实现k8s服务的快速更新。

2 CD 构建过程

以下前提条件是项目中很多服务已经部署好了,因此没有重新部署的必要,对其更新的时候只需要更新其镜像即可。

2.1 参数配置说明

已有服务沿用现有的yaml配置,每次只更新其镜像版本。
CD 流程地址 deploy_kubectl_sre
更新过程:

  1. 选择命名空间
    对应参数:namespace(sre设置为下拉选项)
  2. 填写服务名称
    对应参数:deployment_name(用户自填)
  3. 确定dockerhub仓库后缀, 格式为命名空间/仓库名称(例如 yourNamespace/xg_nginx)
    对应参数:dockerhub_repo (用户自填)
  4. 确定容器名称,使用kubectl 更新服务镜像的时候需要指定容器名称,否则会更新失败
    对应参赛卡: container_name(用户子填写)
  5. 填写镜像版本
    对应参数:image_version(用户自填)
    填写完参数点击执行即可
  6. 测试命令, 服务发布后可以通过简单的端口可用性来测试,当然也可以更改为执行指定的测试脚本
    对应参数: test_cmd(用户自填)

2.2 pipeline 脚本

namespace = "${params.namespace}"
deployment_name = "${params.deployment_name}"
dockerhub_repo = "${params.dockerhub_repo}"
image_version = "${params.image_version}"
container_name = "${params.container_name}"
test_cmd = "${params.test_cmd}"

default_description = "${namespace}/${deployment_name} ${image_version}"
currentBuild.description = "${default_description}"


pipeline {
agent any

stages {
stage('check-deploy') {
agent {
node {
label 'kubectl_server'
}
}
steps {
echo 'Hello, check deployment ${namespace}/${deployment_name} exists'
sh "/usr/local/bin/kubectl --kubeconfig /home/jenkins/.kube/ali_k8s_config -n ${namespace} get deploy ${deployment_name}"
}
}

stage('deploy') {
agent {
node {
label 'kubectl_server'
}
}
steps {
echo 'Hello, deploy to k8s'
sh """
/usr/local/bin/kubectl --kubeconfig /home/jenkins/.kube/ali_k8s_config -n \${namespace} set image deployment/\${deployment_name} \${container_name}=registry-vpc.cn-shanghai.aliyuncs.com/\${dockerhub_repo}:\${image_version}
"""
}
}

stage('test') {
steps {
echo 'Hello, test ${namespace}/${deployment_name}'
sh """
mkdir ${namespace}_${deployment_name} && cd ${namespace}_${deployment_name}
${test_cmd}
cd .. && rm -fr ./${namespace}_${deployment_name}
pwd
"""
}
}
}

post {
always {
echo 'I have finished'
}
success {
echo "build ${gitlab_repo} ${branch_name}:${image_version}, succeed!"
sh """
curl -X POST -H "Content-Type: application/json" -d '{"msg_type":"text","content":{"text":"deploy_kubectl_sre notify: ${gitlab_repo} ${branch_name}:${image_version}, succeed!"}}' https://open.feishu.cn/open-apis/bot/v2/hook/6caa4463-xxxx-xxxx-xxxx-89ac0e9e39c8
"""
}
failure {
echo "build ${gitlab_repo} ${branch_name}:${image_version}, failed!"
sh """
curl -X POST -H "Content-Type: application/json" -d '{"msg_type":"text","content":{"text":"deploy_kubectl_sre notify: ${gitlab_repo} ${branch_name}:${image_version}, failed!"}}' https://open.feishu.cn/open-apis/bot/v2/hook/6caa4463-xxxx-xxxx-xxxx-89ac0e9e39c8
"""
}
}
}

2.3 测试流程

jenkins 执行参数如下:

cicd 02--构建通用的CD流程_持续发布


执行结果如下:

cicd 02--构建通用的CD流程_Jenkins_02

3 注意事项

  1. 涉及多个不同节点的时候需要配置不同节点的访问权限,执行kubectl 的节点需要配置k8s 的config文件。

4 说明

软件环境:
jenkins 版本:2.299
参考文档:
​​​jenkins 官方文档​​​​kubectl/kubectl-commands​​


举报

相关推荐

0 条评论