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

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

一个Java的main方法在JVM中的执行流程示例详解

《一个Java的main方法在JVM中的执行流程示例详解》main方法是Java程序的入口点,程序从这里开始执行,:本文主要介绍一个Java的main方法在JVM中执行流程的相关资料,文中通过代码... 目录第一阶段:加载 (Loading)第二阶段:链接 (Linking)第三阶段:初始化 (Initia

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践