Jenkins初步使用记录
29 Nov 2020 Jenkins
Jenkins这个工具似乎在流程中使用的还挺多的,于是就找了些时间试用了下。
使用的Jenkins版本是2.266。
Jenkins的官方网站,初看还是有点上个世代的感觉的。至少和其他的CI工具相比,不是那么的重视界面。
不过Jenkins的主要优势是开源免费,对于只是需要自动化流程的小规模工作室而言还是有不少优势的。毕竟流程跑起来最重要的是功能,界面只要能表达清晰、流畅使用就足够了。
下面主要记录一些遇到的问题,安装过程这些可以参考官方网站。
Root权限运行
一开始没搞明白Jenkins的使用方式,其实如果流程依赖于svn或者git的话,是不需要root权限的。
Jenkins的运行用户可以在配置中修改:
vi /etc/sysconfig/jenkins
修改
$JENKINS_USER=”root”
出于保守起见,同时修改目录权限:
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins
然后重启Jenkins
/etc/init.d/jenkins restart ps -ef grep jenkins
这样之后就能正常的对有权限的目录进行访问了。
由于后面发现不需要Root权限,把配置改回去之后,把目录权限直接全部开放:
chmod -R 777 /var/lib/jenkins
chmod -R 777 /var/cache/jenkins
chmod -R 777 /var/log/jenkins
错误捕捉
Jenkins在运行脚本时,遇到了明明脚本报错却将job视为成功的情况。
主要原因是,在脚本头部具有 #!/bin/bash
。由于jenkins会将脚本放在一个临时sh文件里面执行,导致这样无法捕获到错误,移除#!/bin/bash
即可,无需指定命令解释器。
或者,在脚本头部( #!/bin/bash
后面)加入命令:set -o errexit
或者 set -e
。
编译错误
这个问题的表现有点奇怪:直接在命令行中执行指定的脚本,编译过程可以正常通过。但是Jenkins使用同样的脚本却无法正确的完成编译。
最后发现是CMake自动选择的编译器不同造成的,Jenkins在运行时获取的环境变量与在命令行中的环境变量不同。
分别执行echo $PATH
会发现输出的内容不一致。
虽然CMake本身支持强制指定编译器路径,不过考虑到通用性,可以直接在Jenkins中设定环境变量参数。
这样就能正常通过编译了。
Bash记录
由于之前对bash不是很熟悉,过程中找到一些有帮助的bash命令记录在这里记录一下
读取Svn信息
REVISION=`svn info | grep 'Last Changed Rev' | tr -d 'Last Changed Rev: '`
echo $REVISION
写入到文件
直接写入:
echo "hello" > logfile.txt
附带输出:
echo "hello" | tee logfile.txt printf "hello" | tee logfile.txt
读取文件第一行
line="$(head -1 logfile.txt)"
插件安装
插件安装遇到了很多奇怪的问题,无论使用官方的发布版本还是docker版本都无法正确的安装。
搜索了下,找到的建议里面,无论是设置proxy参数还是修改镜像地址都无法完成安装。
表现上看,网络测试是通的,但是下载对应的插件包就是失败。可是使用wget去下载对应的路径又能成功,由于报错语焉不详,无法进一步寻找原因,最后只能使用手工下载安装包并直接在后台手动安装的方式。
由于需要按照依赖来按顺序安装,所以需要一个一个的去自己找。应该是可以写成脚本的形式来自动进行的,只是由于只是稍微试用,就没有仔细纠结了。而且正常的话,就算手工安装也花不了多少时间。不如说搜索如何解决自动安装失败问题的过程反而花了更多时间……