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

2024-05-30 23:48
文章标签 通用 流程 构建 02 cd cicd

本文主要是介绍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 anystages {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 执行参数如下:
在这里插入图片描述
执行结果如下:
在这里插入图片描述

3 注意事项

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

4 说明

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

这篇关于cicd 02--构建通用的CD流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017092

相关文章

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可