zoukankan      html  css  js  c++  java
  • jenkins~pipeline~修改文件里的版本

    通过jenkins实现CICD是很容易的,当你使用jenkins pipeline之后可以使用你的代码复用性更高,它使用groovy作为脚本语言,你可以把公用的方法写到var文件夹里,在其它jenkinsfiles文件里去引用它们即可。
    对于jenkins构建的镜像来说,像docker,k8s-helm都需要有版本的概念,像docker你可以直接使用jenkins-tagId,而helm由于是一组docker容器的组合,所以它的版本号是独立的,一般会记录在它的Chart.yaml文件里,我们需要通过groovy来修改每次部署之后的helm chart的版本,即让它的版本增1。

    sh执行多行命令

    对于使用sh来说,通过sh """来实现多行命令的执行,代码如下:

    sh """
    echo "hello world"
    echo "yes"
    

    sh里的变量

    对于sh """里的变量,有它特殊的写法,即使用"$变量名"的方式

      let VER="$VER"+1
      echo "version:$VER"
    

    sed修改文件内容

    在sh里,我们使用sed命令来修改文件的内容,你可以删除字符所在的行,在某个位置位置插入字符,在文件尾插入字符等,下面是我对修改helm chart.yaml里的版本信息写的sh脚本

            // 注意:在sed里两个\表示输出它后面的空格,-i表示操作文件,sh里的变量需要用"$名称"来输出
            // 第一行 sed删除之前的imageTag:$config.tagId这行;第二行sed是添加一个新的imageTag
            // 第三行 是查找当前chart的版本
            // 第四行 当前版本加1
            // 第六七行是删除原chart里的版本信息
            // 第八九行是添加新的版本信息
            
             sh """
              sed -i "/${config.imageName}-imageTag/{n;d}"  ${WORKSPACE}/charts/${config.namespace}/values.yaml        
              sed -i "/${config.imageName}-imageTag/a \ imageTag: $config.tagId"   ${WORKSPACE}/charts/${config.namespace}/values.yaml                
              VER=$(cat ${WORKSPACE}/charts/${config.namespace}/Chart.yaml | grep 'version:' | awk -F ':' '{print $2}')
              let VER="$VER"+1
              echo "version:$VER"
              sed  -i '/appVersion/d' ${WORKSPACE}/charts/${config.namespace}/Chart.yaml
              sed  -i '/version/d'  ${WORKSPACE}/charts/${config.namespace}/Chart.yaml
              sed  -i '$a\appVersion: '"$VER"  ${WORKSPACE}/charts/${config.namespace}/Chart.yaml
              sed  -i '$a\version: '"$VER"  ${WORKSPACE}/charts/${config.namespace}/Chart.yaml
              cd ..   
              helm package ${WORKSPACE}/charts/${config.namespace} 
              helm upgrade  ${config.namespace}  ${WORKSPACE}/charts/${config.namespace}  -i  
             """
    
  • 相关阅读:
    c#——树的深度,广度优先遍历与迭代器(IEnumerable<T>)的结合使用
    弱网下移动端网络连接处理策略
    弱网络环境下最优调度和优化传输层协议方案
    Wpf ToolTip 绑订
    minio配置
    使用本机映像优化 NET 桌面应用
    Linux内核内存管理:系统内存布局-内核空间和用户空间
    mysql 的 limit 与sql server 的 top n
    win 10 遇到某文件一直在占用导致无法关闭,或者去任务管理器找不到服务怎么办?具体解决
    sql server
  • 原文地址:https://www.cnblogs.com/lori/p/14001969.html
Copyright © 2011-2022 走看看