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

2023-11-06

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 执行参数如下:
在这里插入图片描述
执行结果如下:
在这里插入图片描述

3 注意事项

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

4 说明

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cicd 02--构建通用的CD流程 的相关文章

  • 使大型静态数据文件可供 kubernetes pod 使用

    我有一些相当大的 UTF 8 数据文件 pod 需要在启动时加载到内存中 从几百 KB 到大约 50 MB 该项目 包括 helm 图表 是开源的 但其中一些文件不是开源的 否则我可能只会将它们包含在图像中 我最初的想法是创建配置映射 但我
  • kubernetes nginx ingress 无法将 HTTP 重定向到 HTTPS

    我有一个托管在 Google Cloud 平台中的网络应用程序 该应用程序位于负载均衡器后面 而负载均衡器本身位于入口后面 入口设置了 SSL 证书 并按预期接受 HTTPS 连接 但有一个问题 我无法让它将非 HTTPS 连接重定向到 H
  • Jenkins 安排代理节点可用性

    我们有许多机器希望用作 Jenkins 的代理节点 但仅限于特定的时间间隔 即不在工作时间 是否可以配置一个代理节点作为特定时间范围内构建的代理 例如 周一至周五晚上 10 点至凌晨 5 点 周六和周日全天 In the 从机配置面板 选择
  • APT:Post-Invoke 在 debian:bookworm-slim 上失败

    我有一个 Jenkins 管道 它使用docker dind 20 在这个过程中我做 FROM ruby 3 2 slim bookworm apt get update 当我尝试使用我的本地构建映像 MacOS ventura 时dock
  • PHP启动:无法使用Jenkins加载动态库'/usr/lib/php/20160303/pdo_sqlite.so'

    在 Jenkins 管道中运行 phpunit 测试套件时 我收到此警告 PHP Warning PHP Startup Unable to load dynamic library usr lib php 20160303 pdo sql
  • 如何配置 Ansible 跳过两个堡垒主机?

    我想编写一个 Ansible 剧本 使用 Ansible 2 7 5 它将在到达目标服务器之前跳过两个主机来执行诸如安装 docker 和 python 等操作 我能够让 Ansible 通过一台主机跳转到server1通过将其添加到我的h
  • 如何使用 jenkins shell 创建新的 git 分支

    我想达到以下目标 在某些詹金斯工作中 从 dev branch 创建一个新分支 对新创建的分支 new branch 进行一些更改 将新创建的分支推送到 git repo 我在詹金斯中执行了以下步骤 我已经在 源代码管理 部分配置了我的 g
  • kubectl --token=$TOKEN 未使用令牌的权限运行

    当我使用命令时kubectl与 token标记并指定令牌 它仍然使用来自kubeconfig file 这就是我所做的 NAMESPACE default SERVICE ACCOUNT NAME sa1 kubectl create sa
  • Jenkins 多分支管道 - 在分支中配置属性?

    我们已经使用 Jenkins 多分支管道插件成功设置了构建管道 该插件在大多数情况下都运行良好 但是我们遇到了一个困扰我们的问题 Jenkinsfile包含一组属性 这些属性也显示在 UI 中 但如何为各个分支设置默认值 这就是我们的属性定
  • 如何从 docker 容器运行 webpack 构建?

    我正在制作的应用程序是用 ES6 编写的 其他好东西是由 Docker 容器内的 webpack 转译的 目前 一切工作从创建内部目录 安装依赖项到创建编译的捆绑文件 当运行容器时 它说 dist bundle js 不存在 除非我在主机目
  • 如何删除 TFS 工作区映射?

    我在一个团队项目中的 tfs 中有一个项目 然后我们将该项目移动到另一个团队项目中的不同位置 我已将 Jenkins 配置为连接到团队项目并构建我的解决方案 但是当我更改设置以连接到新的 tfs 团队项目时 出现以下错误 workspace
  • 访问先前 Jenkins 构建中失败的阶段

    我编写了一个 Jenkinsfile 脚本 它获取当前 Github 提交中的文档是否已更新或代码是否已更新 并相应地启动所有阶段 如果仅更新文档 我不会再次运行代码测试阶段 所以现在如果之前的构建失败并且现在在当前的 Git 提交中仅更新
  • 如何阻止 Jenkins 中的 CI 构建意外发布到发布存储库?

    有时 开发人员会不小心签入 POM 中没有 SNAPSHOT 的版本 这将构建 Maven 项目并将工件发布到发布存储库 我怎样才能避免这种情况呢 我只想发布构建工件以发布存储库 而不是 CI 构建 我考虑了以下问题 但它们都不是一个简单的
  • 从 Jenkinsfile 中获取有关其他分支的信息

    Jenkins Blue Ocean 与链接的 Bitbucket Server 实例在同一本地网络上运行 Jenkins 中的多分支项目能够为本地 Bitbucket 服务器上链接的 Bitbucket 存储库的每个分支创建一个分支 但在
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • 使用 Jenkins 运行 ios-sim

    我正在尝试使用以下命令从命令行启动我的应用程序ios sim https github com downloads pegli ios sim ios sim xcode4 3 tar gz但这就是我得到的 Started by user
  • 无法使用 minikube 设置 Istio

    我按照 Istio 的官方文档为带有 minikube 的示例 bookinfo 应用程序设置了 Istio 但我得到了无法连接到服务器 net http TLS 握手超时错误 这些是我遵循的步骤 我安装了 kubectl 和 miniku
  • Jenkins 管道中的动态变量与 Groovy 方法变量

    我在 Groovy 中有一个用于声明性管道的 Jenkinsfile 以及两个创建的 Jenkins 变量 其名称为 OCP TOKEN VALUE ONE 和 OCP TOKEN VALUE TWO 以及相应的值 当我尝试传递方法变量并在
  • 在 jelly 脚本中使用 JavaScript

    我正在尝试在 Jenkins 中使用用 JavaScript 编写的脚本 我认为最简单的方法是在 jelly 脚本中调用它们 例如 我有文件 myCustom js alert Hello World function myFunction
  • 通过 kubernetes 标签或注释对 prometheus 目标进行分组?

    我有两个关于普罗米修斯的问题 我使用这个舵图 https artifacthub io packages helm prometheus community prometheus modal values https artifacthub

随机推荐

  • MYSQL查询优化器

    MYSQL 逻辑结构 MySQL 使用典型的客户端 服务器 Client Server 结构 体系结构大体可以分为三层 客户端 服务器层以及存储引擎层 其中 服务器层又包括了连接管理 查询缓存 SQL 接口 解析器 优化器 缓冲与缓存以及各
  • Navicat连接Mysql遇到的错误

    在navicat链接mysql以后的版本时 会出现2059的错误 这个错误出现的原因是在mysql8之前的版本中加密规则为mysql native password 而在mysql8以后的加密规则为caching sha2 password
  • mysql内测试连通性命令_怎么使用ping命令进行连通性测试

    关于ping命令的作用 ping 命令有助于验证网络层的连通性 一般进行网络故障排除时 可以使用ping 命令向目标计算机或IP地址发送ICMP回显请求 目标计算机会返回回显应答 如果目标计算机不能返回回显应答 说明在源计算机和目标计算机之
  • python提取txt文件中的数据

    从存储在txt文件中的30000多条数据当中提取自己需要的信息 如下图示例的数据格式 需要提取出now后的数值并存储在另外一个txt文件当中 结果示例 code path r r new data1 txt with open path r
  • C++ 项目

    C 方向 10个企业级别项目 138个工作日 1 学生信息管理系统 C 基础 2 俄罗斯方块 控制台 C 基础
  • Arcgis server在solaris和linux上,用直连的方式连接sde的时的配置

    Arcgis server在solaris和linux上 用直连的方式连接sde的时候需要做一点配置才可以连上 1 在
  • 微信小程序从入坑到放弃二十:生成海报前使用wx.downloadFile或wx.getImageInfo时潜在的坑

    摘要 上周六下午16点左右 公司研发群中扔来一张bug截图 当天21点 群里又扔来bug截图 研发团队二话不说开始查找bug如何复现 22点20分左右 我终于复现了bug 随后就是看源码 搜索 跳坑 爬坑 周日同其他研发小伙伴一样 又是奉献
  • OpenCv案例(九): 基于OpenCvSharp图像分割提取目标区域和定位

    以下原图中 物体连靠在一起 目的是将其分割开 再提取轮廓和定位 原图 最终效果 麻烦的地方是 分割开右下角部分 两个连在一起的目标物体 下图所示 基本方法 BoxFilter滤波 二值化 轮廓提取 凸包检测 图像的矩 代码如下
  • Jar包反编译后修改源码再编译

    Jar包反编译后修改源码再编译 文章目录 Jar包反编译后修改源码再编译 1 场景 2 详细步骤 2 1 查看源码 2 2 生成源文件 2 3 构建项目 2 4 编译成jar包 3 参考链接 1 场景 需要对当前的jar包功能进行修改 但是
  • angularjs系列之轻松使用$q进行异步编程

    angularjs系列之轻松使用 q进行异步编程 来源 网络 编辑 admin 第一部分关于js中的异步编程 异步编程简单的说就是你写了一段代码 但他不会按照你书写代码的顺序立即执行 而是等到程序中发生了某个事件 如用户点击了某个按钮 某个
  • 深入理解计算机系统-链接篇

    在linux系统下 很多开源C C 程序的编译规则都是以makefile文件的形式给出 我刚开始学习makefile规则是看陈浩的 跟我一起学makefile 后来看 深入理解计算机系统 这本书 对编译链接有了更加深入的了解 本文主要介绍程
  • 人机交互知识点总结

    人机交互知识点总结 考试题型及分值分布 选择题 10题 20分 填空题 10题 20分 判断题 可选 5题 10分 解答题 5 6题 30分 分析计算题 1 2题 20分 注意 答案有多条时 用1 2 3形式分别列出 考查内容 掌握人机交互
  • CTF加密解密—CRYPTO—密码学签到

    0x00 考察知识点 考虑字符串倒序的问题 0x01 题目 密文是 wohs ftc galf 0x02 Write Up 直接进行字符串倒序即可 签到题 简单点是肯定的啦
  • 操作系统文件的两种结构

    文件 文件指的是一组带标识的逻辑上有完整意义的数据项 构成文件内容的基本单元 的序列 或者是相关联记录的集合 文件存放在磁盘或磁带等存储介质上 文件的逻辑结构和物理结构 一 逻辑结构 1 无结构文件 流式文件 2 有结构文件 记录式文件 二
  • avue crud-tree介绍

    前言 最近遇到了需要使用表格树的需求 发现avue crud有tree的组件 然后在使用过程中发现诸多问题 网上对应的介绍也很少 所以在自己使用成功之后为后人提供帮助 正文 效果图 html部分
  • SOLID Principles in Unity

    什么是SOLID 假如你是一个程序员 我敢肯定你听过编程原则或类似的东西 也许松耦合的设计 SOLID不是一个编程语言或编程范式 它不是一个特定的设计模式 它不是针对某个项目的 在面向对象编程中 SOLID实际上是一个助记缩写五个 S O
  • VMware-报错:无法将Ethernet0连接到虚拟网络VMnet8

    by 小世界 http redcisco blog 163 com 版本 vmware10 0 0 物理机 win8 虚拟机 rhel6 3 问题 无法将 Ethernet0 连接到虚拟网络 VMnet8 有关更多信息 请参见 vmware
  • react-native-image-picker 4.0 集成

    github react native image picker 4 x相对于 2 x 3 x已删除 showImagePicker 4 x相对于 2 x 3 x已删除 showImagePicker 4 x相对于 2 x 3 x已删除 s
  • 【Linux下Docker安装JupterLab】

    Linux下Docker安装JupterLab 拉取docker镜像 docker pull jupyter base notebook latest https jupyter docker stacks readthedocs io e
  • cicd 02--构建通用的CD流程

    cicd 02 构建通用的CD流程 1 介绍 2 CD 构建过程 2 1 参数配置说明 2 2 pipeline 脚本 2 3 测试流程 3 注意事项 4 说明 1 介绍 笔者在 cicd 01 构建通用的CI流程 中介绍了一个通用的doc