Jenkins实现持续集成中的那些坑

本文总结了在使用Jenkins进行持续集成时遇到的Shell脚本问题,包括文件比较的特殊字符处理、awk命令的使用、curl调用job参数传递、单双引号的用法、grep与egrep的区别、环境变量与json对象取值等,提供了详细的解决方案和示例。
摘要由CSDN通过智能技术生成

小伙伴在《这些年我们一起搞过的持续集成~Jenkins+Perland Shell script》中详细介绍了优化后的job流,接下来总结一下在构建这一套job中遇到的Shell  Script和Jenkins的问题。

1.      比较两个文件后有特殊字符< 会导致Jenkins job failure;

图片1

解决方法:过滤特殊字符<同时利用diff–b去除最后的错位行,更多diff使用请参考diff--help;

-------------1)

[annzan@vm10226address]$ diff current.txt base.txt

1,2d0

<annzan

<wadexu

52c50

<davima

---

>davima

-----------2)

[annzan@vm10226address]$ diff -b current.txt base.txt

1,2d0

<annzan

<wadexu

-------------3)

[annzan@vm10226address]$ diff -b current.txt base.txt | grep "<"|sed 's/^<//g'

annzan

wadexu

 

2.      awk按分隔符分段输出,例如 echo $PROJECT_LIST|awk –F “,”‘{print $1}’ 。 将PROJECT_LIST遍历输出,需要参数化输出段数,$$id肯定是不行的;

解决方法: echo $PROJECT_LIST|awk  -v id=$id  -F”,” ‘{print$id}’

这边之前也试过cut这个命令去分隔字符串, echo $PROJECT_LIST|cut  -f $id  -d “,” 但是这里有个问题,当PROJECT_LIST中没有,这个分隔符的时候,不论id是几结果都是本身。所以cut命令无法实现我们想要遍历所有project的初衷,除非强制PROJECT_LIST一定要有一个分隔符。

 

3.      用curl命令调用下一个job大大提高了我们job流程的灵活机动性,同时用data json将参数值也一起传递到下一个job,实现我们整个流程的参数化。

curl -X POST --user "jadmin:71103407"-s http://vm10686.global.test.net:8080/view/Template/job/Template_Service_Commit_Auto_Build/build --data json='{"parameter":[{"name":"PROJECT_NAME","value":"'$projectName'"},{"name":"PIPELINE_NUM","value":"'$BUILD_NUMBER'"}]}' 

注意: value后面双引号里面直接加值,如果是参数的话,需要在参数名外面加单引号。

 

4.       这里着重讲一下我们遇到的天坑,单引号,双引号再顺便提一下反引号和反斜杠。[转自互联网]

 1. 单引号( '' ) 
# grep Susan phonebook 
Susan Goldberg 403-212-4921 
Susan Topple 212-234-2343 
如果我们想查找的是SusanGoldberg,不能直接使用grep Susan Goldberg phonebook命令,grep会把Goldbergphonebook当作需要搜索的文件 
# grep 'Susan Gold' phonebook 
Susan Goldberg 403-212-4921 
shell碰到第一个单引号时,它忽略掉其后直到右引号的所有特殊字符 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值