jenkins持续集成过程中的一些技术积累

Jenkins

Jenkins2

全新的jenkins 2 发布了,新版本更好的支持Pipeline,和老版本完全兼容.
最简单的升级方法就是采用

yum install jenkins

这种方法.
由于jenkins2不支持部分容器,因此,简单的下载jenkins.war替换以前的,可能会导致启动不了。

Jenkins用户密码填错的后果

问题:
最近办公电脑总是被锁定,无法正常工作。
原因:
Jenkins的svn操作账号密码被人改动了。
在中兴,凡是使用域账号的软件,如svn等,如果密码错误,都会导致域账号锁定。
最明显的效果,就是办公电脑被锁定,无法办公。
由于svn大家使用的很多是免费版本,无法通过日志追查密码错误的电脑。
因此,如果一个人很无聊,通过软件不断将一个人的账号密码输错,这个人几乎就无法办公了。
这样的域账号锁定设计,其实也算是一个bug.。
解决:
Jenkins将自己的svn账号密码填对即可解决。

Jenkins电视墙不锁屏方法

问题:
Jenkins的电视墙,需要持续在显示中输出,但是公司的策略是强制锁屏的(公司的系统默认10分钟锁屏,还强制无法修改),开一会电视墙就被锁屏。
解决:
我采用python写了模拟鼠标,键盘的操作, 来避免锁屏发生.
经过测试, 仅移动鼠标是无法阻止锁屏, 最有效的就是模拟键盘.

import win32api, win32con
win32api.keybd_event(144,0,0,0)
win32api.keybd_event(144,0,win32con.KEYEVENT_KEYUP,0)

就可以实现numlock(144)这个按键按下和释放的操作.
让它周期执行, 就可以阻止锁屏, 持续电视墙的输出了.

Jenkins的数据采用JUnit呈现

问题:
jenkins开发了一些程序,如何将输出数据呈现。
思路:
Jenkins支持JUnit XML的解析和呈现,将数据写成JUnit XML格式即可。
解决:
那怎么将信息写成junit xml格式呢?
万能的python库又来了

pip install junit-xml

那么就可以很简单的书写junit格式的xml了.
然后在jenkins中发布junit报告,就能将我们需要的信息通过junit的方式来呈现.
注意, pypi官方的接口文档没有更新, 如何使用,必须去看它的源码才行(不过实现非常简单).

svn版本号

这是个很易错的地方,很多新手反复问我为什么SVN_REVISION的变量为空。
jenkins默认会有SVN_REVISION这个变量
但是,如果svn的源有多个时,这个变量就会为空.
假设jenkins设置了两个svn module
SVN_REVISION_1 和 SVN_REVISION_2分别代表两个module的最新SVN版本.
注意,同一个项目的两个文件夹里的SVN_REVISION是不一样的, svn会分别记录不同文件夹的最新svn版本号. 这就是为什么有两个及以上时,SVN_REVISION无法表达从而变成空的原因。

jenkins的groovy调试

jenkins支持groovy, groovy的强大在于可以直接和jenkins类(java)打交道,如获取build的结果等等.
email ext plugin可以采用groovy 模板进行邮件html方式的呈现, 即可以漂亮,又可以做到更多数据的呈现.
如果需要调试groovy, 可以在浏览器中输入
$JENKINS_URL/script
就可以进入groovy脚本调试界面.

删除build history

jenkins当有很多build history时,需要删除并从1开始计算.
在$JENKINS_URL/script的groovy脚本调试网页中执行:

item = Jenkins.instance.getItemByFullName("your_job_name") item.builds.each() { build -> build.delete() } item.updateNextBuildNumber(1) 

即可实现

远程删除job的build信息

jenkins的job每build一次,会有将job内容备份下来.如果需要手工删除里面的build,可以使用

curl -u user_name:apiToken -X POST JENKINS_URL/job/job_name/[xx-yy]/doDelete 

那么就可以删除从xx到yy区间的build了.
注意,这里的apiToken需要从网页中获取
JENKINS_URL/me/configure网页里可以查看用户的apiToken

jenkins需要重启来重新加载环境

遇到一个jenkins很坑的地方. 将A用户加入G组, 从而让A用户具备G组的权限.在服务器的shell怎么操作,都是对的.
但是,让jenkins服务执行,就是没有权限.
被坑里很久后, 才知道 jenkins是不会动态加载环境的, jenkins必须重启, 才会应用上最新的组信息. 坑爹啊.

邮件模板

jenkins服务器的邮件发送功能,建议采用email-ext插件,可以定制化的给什么人发送什么内容的邮件,非常强大。
另外,推荐使用邮件模板。在jenkins的系统配置的邮件模板新建一个,设置后。各个项目的各个jobs都可以直接选择模板,就可以实现邮件发送了,不需要每个job体力活的修改。
模板一旦修改,使用它的jobs全部按新规则执行,对大规模jobs的jenkins服务器而言,是非常方便的。

jenkins脚本需要使用密码却不想明文的解决方法

Jenkins持续集成服务器,需要从SVN update and commit代码,其中 commit部分会涉及密码明文化,谁也不希望自己的人事密码赤裸裸地被显示.
比较多种方案后,我选择了shc.
shc是一个可以将脚本转为C语言再编译为二进制执行文件的工具.
将涉及人事密码的关键一句拿出来,单独写成一个脚本再用shc变成二进制执行文件,原脚本调用它即可.这样就可以解决密码明文化的问题.
还有通过hash将明文密码加密的方案,这种方式有漏洞,只是防止了明文化而已,如果其他人也具有执行脚本的权限时,跟踪加密密码解码后的变量,就可以获取你的人事密码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值