Jenkins批量替换配置语句整理

前言

        在新私有化部署及部署同一私有化的测试环境部署工作中,需要使用大量时间逐个修改Jenkins上job的名字或者里面的配置,本文档整理了一些批量修改语句给大家参考,以提高部署效率。

        注:使用每条命令前执行前先前面的find部分确认查找到的目录是否为目标目录再完整执行

一、修改job名称

        在实际使用中请先将需要修改的job复制到其他目录,在其他目录进行操作再mv到对应Jenkins的job目录下防止误操作影响其他job

将job目录下的选择的对应私有化job拷到/root/cp/目录:

        $ find . -maxdepth 1 -name "*hwx86*" -exec cp -a {} /root/cp/ \;

        此处是先cd到对应Jenkins的job目录下执行,后面的操作在/root/cp/目录下执行

将目录下带有yunhe-prod的目录 中的yunhe-prod 替换为hwx86-test

        $ find . -maxdepth 1 -name "*yunhe-prod" | xargs rename yunhe-prod hwx86-test

        即修改yunhe-prod后缀到hwx86-test

然后复制修改完成的文件到对应的/opt/job/目录,job目录根据实际情况来

        $ find . -maxdepth 1 -name "*hwx86*" -exec cp -a {} /opt/job/ \;

登录Jenkins在9000后面加上reload回车Jenkins会重新加载配置

        再新建对应项目的视图勾选之前创建的job即可

二、job下配置文件内容修改

         每个Jenkins上的job对应的配置在服务器上就是这个config.xml文件,所以对配置文件的修改后再reload  Jenkins即等同与直接修改页面上的各配置

        注意以下操作均在/alidata/.jenkins/jobs的job目录下运行,因为场景是在job已经创建后的批量修改配置操作所以在其他目录下无法调试,我是采用自己搭一个Jenkins进行调试

1、替换COMPANY 将COMPANY=yunhe替换为COMPANY=hwx86
        $ find `find . -name "*-hwx86-test"` -maxdepth 1 -name 'config.xml' | xargs sed -i 's/COMPANY=yunhe/COMPANY=hwx86/g'

2、将BUILD_ENV=prod替换为BUILD_ENV=test
find `find . -name "*-hwx86-test"` -maxdepth 1 -name 'config.xml' | xargs sed -i 's/BUILD_ENV=prod/BUILD_ENV=test/g'

3、替换镜像:

将:
swr.cn-east-3.myhuaweicloud.com/syh/$IMAGE_NAME

替换为:
swr.cn-east-3.myhuaweicloud.com/x86/$IMAGE_NAME:v$tag

        因为docker部署打的镜像标签为latest,而k8s是根据日期+构建次数作为版本号。故在某使用docker部署的私有化修改为k8s部署时需要这这里替换,反之亦然

        $ find `find . -name "*-hwx86-test"` -maxdepth 1 -name 'config.xml' | xargs sed -i 's?swr.cn-east-3.myhuaweicloud.com/syh/$IMAGE_NAME?swr.cn-east-3.myhuaweicloud.com/x86/$IMAGE_NAME:v$tag?g'

4将hwx86-front.txt或hwx86-backend.txt里的内容

        插入docker push swr.cn-east-3.myhuaweicloud.com\/x86\/$IMAGE_NAME:v$tag 下方

这个需求为:

        docker部署的jenkins任务到docker push XXXX就结束:

         而如果要修改为k8s的版本下面就要添加编辑yaml的命令:

 因为添加多行直接通过命令难以做的故将要添加的配置保存到文件:

hwx86-front.txt

# cat hwx86-front.txt 
 
cat<< EOF>$ITEM_APP-front-$COMPANY-$BUILD_ENV.yaml
 
apiVersion: v1
kind: Service
metadata:
  name: $ITEM_APP-front-$COMPANY-$BUILD_ENV
  namespace: $NAMESPACE
spec:
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: $ITEM_APP-front-$COMPANY-$BUILD_ENV
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: $ITEM_APP-front-$COMPANY-$BUILD_ENV
  namespace: $NAMESPACE
spec:
  replicas: 1
  selector:
    matchLabels:
      app: $ITEM_APP-front-$COMPANY-$BUILD_ENV
  template:
    metadata:
      labels:
        app: $ITEM_APP-front-$COMPANY-$BUILD_ENV
    spec:
      containers:
      - name: $ITEM_APP-front-$COMPANY-$BUILD_ENV
        image: swr.cn-east-3.myhuaweicloud.com/x86/$IMAGE_NAME:v$tag
        ports:
        - containerPort: 80
        readinessProbe:
          httpGet:
            scheme: HTTP
            path: /index.html
            port: 80
          initialDelaySeconds: 10
          periodSeconds: 5
      imagePullSecrets:
        - name: registrypullsecret
 
 
 
EOF
 
 
 
 
 
echo "---------------k8s更新开始-----------------------"
\cp $ITEM_APP-front-$COMPANY-$BUILD_ENV.yaml  $yaml_dir
cd  $yaml_dir
chown  -R hwx86.hwx86 ./
su - hwx86 <<EOF
kubectl apply -f $yaml_dir/$ITEM_APP-front-$COMPANY-$BUILD_ENV.yaml
EOF

         hwx86-front.txt及hwx86-backend.txt为jenkins中的配置需要到服务器上直接查看job下'config.xml复制里面的内容,注意格式

前端:
        $ find `find . -name "*front-hwx86-test"` -maxdepth 1 -name 'config.xml' | xargs sed -i '/docker push swr.cn-east-3.myhuaweicloud.com\/x86\/$IMAGE_NAME:v$tag/r hwx86-front.txt'
后端:
        $ find `find . ! -path "./*front*" -name "*-hwx86-test"` -maxdepth 1 -name 'config.xml' | xargs sed -i '/docker push swr.cn-east-3.myhuaweicloud.com\/x86\/$IMAGE_NAME:v$tag/r hwx86-backend.txt'

5、删除文件中对应行中包含关键字 “应用yaml文件” “kubectl apply -f” 之间包括查找到的上下两行的全部内容

这个需求为k8s部署的私有化部署测试环境使用docker要删除jenkins配置中的:

 

 两者包括之间内容

        $ find `find . -name "*-zjhd-test"` -maxdepth 1 -name 'config.xml' | xargs sed -i '/应用yaml文件/,/kubectl apply -f/d'

这个语句的使用可以扩展到比如现在前端打包:

 批量去掉job配置中的相关行做到批量修改

 2.6 从测试Jenkins迁移到119,需要修改后端打包的jdk版本

         System为使用默认jdk,在Jenkins配置文件上不会体现,需要收到批量添加在环境中配置好的 jdk8

         在<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>下方插入

<jdk>jdk8</jdk>

 语句:

        $ find `find . -name "*-ynjt-test"` -maxdepth 1 -name 'config.xml' | xargs sed -i "/blockBuildWhenUpstreamBuilding/a\  <jdk>jdk8<\/jdk>"

7、job在不同Jenkins间迁移,Job中保存的公钥id(id对应实际密码)不通用,以gitlab为例,拉取代码的账号密钥需要批量替换,否则迁移job后读取不到原id对应的密码

 修改为迁移后Jenkins保存的配置同样密码的id

 语句:

        $ find `find . -name "*-ynjt-test"` -maxdepth 1 -name 'config.xml' | xargs sed -i 's/db33731d-05d9-483d-bdee-4d7e230d162f/9c76bd28-2af0-49de-a802-82e3737871dd/g'

8、修改固定打包节点到不选择节点

 去掉选择的slave1节点,以及勾选:

 语句:

        $ find `find . -name "*-ynjt-test"` -maxdepth 1 -name 'config.xml' | xargs sed -i '/slave1/d' 

        $ find `find . -name "*-ynjt-test"` -maxdepth 1 -name 'config.xml' | xargs sed -i 's/<canRoam>false<\/canRoam>/<canRoam>true<\/canRoam>/g'

9、因测试环境与正式环境k8s部署部分不同替换这部分内容

测试环境:

需要替换为正式环境:

 

        逻辑上是删除测试环境下方的语句,补上下方正式环境的语句,但有个坑,来看的这个job例子的config.xml 文件

         部分job这里的</command>紧跟着前面的语句代表这里是没有换行符的,而<command>脚本</command>两个标志是一一对应表示中间执行shell语句

        如果冒然将这句话删除会导致上方的<command>找不到被删除的</command>使得job无法被Jenkins加载再页面上无法显示该job

        所以需要在删除前将</command>变动到语句的下方=添加换行。

        思路:筛选出未换行job在语句下新加一行添加</command>再将所有job的都做批量删执行语句的操作,保障所有job在操作后</command>没被删除

首先筛选出匹配到未换行的job(测试写法)

        $ find . -name "config.xml" | grep -R "yaml</command>"

正式写法

        $ find . -name "config.xml" | grep -R "yaml&quot;</command>"

将</command>插入到kubectl apply -f所在行的下方

        $ find . -name "config.xml" | grep -R "yaml</command>" |  awk -F : '{print $1}' | xargs  sed -i "/kubectl apply -f/a\</command>" 

效果

 删除从包涵echo ok || mkdir -p的行到包涵kubectl apply -f的行(同时删除查询到的这两行)

        $ find `find . -name "*-ztcj-prod"` -maxdepth 1 -name 'config.xml' | xargs sed -i '/echo ok || mkdir -p/,/kubectl apply -f/d'

余下操作与4节根据前后端筛选添加文本种的文件操作一致

三、其他参考

1、config配置相关:将ADD ArmsAgent.tar.gz /alidata/app/sit插入ENV JAVA_OPTS=""上面
        $ find . ! -path "./developer-service/*" -name 'Dockerfile' | xargs sed -i '/ENV JAVA_OPTS=""/i\ADD ArmsAgent.tar.gz /alidata/app/site'

2、将文件批量复制到所有目录下:比如要对data下某一个私有化相关相关的文件目录都复制进去一个文件或者目录
        在批量复制目录的上一级目录使用(在比如jobs下使用复制到下面所有查找到的job目录下,要么写ls跟绝对路径)  xxx为过滤关键字(项目名或部署级别)  /root/test2/test 为要复制文件或目录   $0"" 双引号中间可以跟目录,会被拼接到复制到的目录后面
         $ ls|grep xxx |awk -F. '{print "cp -a /root/test2/test "$0""}'|bash

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值