[{"data":1,"prerenderedAt":258},["ShallowReactive",2],{"\u002F2020-11-29-jenkins-start-up":3},{"id":4,"title":5,"body":6,"date":236,"description":12,"extension":237,"meta":238,"navigation":241,"path":253,"seo":254,"stem":255,"tags":256,"__hash__":257},"blogs\u002F_legacy\u002F2020\u002F2020-11-29-jenkins-start-up.md","Jenkins初步使用记录",{"type":7,"value":8,"toc":223},"minimark",[9,13,16,26,29,32,37,40,43,49,52,57,60,71,74,79,82,85,96,99,102,113,127,130,133,136,143,146,153,156,160,163,168,178,181,184,190,193,199,202,208,211,214,217,220],[10,11,12],"p",{},"Jenkins这个工具似乎在流程中使用的还挺多的，于是就找了些时间试用了下。",[10,14,15],{},"使用的Jenkins版本是2.266。",[10,17,18,25],{},[19,20,24],"a",{"href":21,"rel":22},"https:\u002F\u002Fwww.jenkins.io\u002F",[23],"nofollow","Jenkins","的官方网站，初看还是有点上个世代的感觉的。至少和其他的CI工具相比，不是那么的重视界面。",[10,27,28],{},"不过Jenkins的主要优势是开源免费，对于只是需要自动化流程的小规模工作室而言还是有不少优势的。毕竟流程跑起来最重要的是功能，界面只要能表达清晰、流畅使用就足够了。",[10,30,31],{},"下面主要记录一些遇到的问题，安装过程这些可以参考官方网站。",[33,34,36],"h2",{"id":35},"root权限运行","Root权限运行",[10,38,39],{},"一开始没搞明白Jenkins的使用方式，其实如果流程依赖于svn或者git的话，是不需要root权限的。",[10,41,42],{},"Jenkins的运行用户可以在配置中修改：",[44,45,46],"blockquote",{},[10,47,48],{},"vi \u002Fetc\u002Fsysconfig\u002Fjenkins",[10,50,51],{},"修改",[44,53,54],{},[10,55,56],{},"$JENKINS_USER=\"root\"",[10,58,59],{},"出于保守起见，同时修改目录权限：",[44,61,62,65,68],{},[10,63,64],{},"chown -R root:root \u002Fvar\u002Flib\u002Fjenkins",[10,66,67],{},"chown -R root:root \u002Fvar\u002Fcache\u002Fjenkins",[10,69,70],{},"chown -R root:root \u002Fvar\u002Flog\u002Fjenkins",[10,72,73],{},"然后重启Jenkins",[44,75,76],{},[10,77,78],{},"\u002Fetc\u002Finit.d\u002Fjenkins restart ps -ef | grep jenkins",[10,80,81],{},"这样之后就能正常的对有权限的目录进行访问了。",[10,83,84],{},"由于后面发现不需要Root权限，把配置改回去之后，把目录权限直接全部开放：",[44,86,87,90,93],{},[10,88,89],{},"chmod -R 777 \u002Fvar\u002Flib\u002Fjenkins",[10,91,92],{},"chmod -R 777 \u002Fvar\u002Fcache\u002Fjenkins",[10,94,95],{},"chmod -R 777 \u002Fvar\u002Flog\u002Fjenkins",[33,97,98],{"id":98},"错误捕捉",[10,100,101],{},"Jenkins在运行脚本时，遇到了明明脚本报错却将job视为成功的情况。",[10,103,104,105,109,110,112],{},"主要原因是，在脚本头部具有 ",[106,107,108],"code",{},"#!\u002Fbin\u002Fbash"," 。由于jenkins会将脚本放在一个临时sh文件里面执行，导致这样无法捕获到错误，移除",[106,111,108],{},"即可，无需指定命令解释器。",[10,114,115,116,118,119,122,123,126],{},"或者，在脚本头部（ ",[106,117,108],{},"后面）加入命令：",[106,120,121],{},"set -o errexit"," 或者 ",[106,124,125],{},"set -e","。",[33,128,129],{"id":129},"编译错误",[10,131,132],{},"这个问题的表现有点奇怪：直接在命令行中执行指定的脚本，编译过程可以正常通过。但是Jenkins使用同样的脚本却无法正确的完成编译。",[10,134,135],{},"最后发现是CMake自动选择的编译器不同造成的，Jenkins在运行时获取的环境变量与在命令行中的环境变量不同。",[10,137,138,139,142],{},"分别执行",[106,140,141],{},"echo $PATH","会发现输出的内容不一致。",[10,144,145],{},"虽然CMake本身支持强制指定编译器路径，不过考虑到通用性，可以直接在Jenkins中设定环境变量参数。",[10,147,148],{},[149,150],"img",{"alt":151,"src":152},"jenkins-path","\u002Fwp-content\u002Fuploads\u002F2020\u002F11\u002Fimage.png",[10,154,155],{},"这样就能正常通过编译了。",[33,157,159],{"id":158},"bash记录","Bash记录",[10,161,162],{},"由于之前对bash不是很熟悉，过程中找到一些有帮助的bash命令记录在这里记录一下",[164,165,167],"h3",{"id":166},"读取svn信息","读取Svn信息",[169,170,175],"pre",{"className":171,"code":173,"language":174},[172],"language-text","REVISION=`svn info | grep 'Last Changed Rev' | tr -d 'Last Changed Rev: '`\necho $REVISION\n","text",[106,176,173],{"__ignoreMap":177},"",[164,179,180],{"id":180},"写入到文件",[10,182,183],{},"直接写入：",[169,185,188],{"className":186,"code":187,"language":174},[172],"echo \"hello\" > logfile.txt\n",[106,189,187],{"__ignoreMap":177},[10,191,192],{},"附带输出：",[169,194,197],{"className":195,"code":196,"language":174},[172],"echo \"hello\" | tee logfile.txt printf \"hello\" | tee logfile.txt\n",[106,198,196],{"__ignoreMap":177},[164,200,201],{"id":201},"读取文件第一行",[169,203,206],{"className":204,"code":205,"language":174},[172],"line=\"$(head -1 logfile.txt)\"\n",[106,207,205],{"__ignoreMap":177},[33,209,210],{"id":210},"插件安装",[10,212,213],{},"插件安装遇到了很多奇怪的问题，无论使用官方的发布版本还是docker版本都无法正确的安装。",[10,215,216],{},"搜索了下，找到的建议里面，无论是设置proxy参数还是修改镜像地址都无法完成安装。",[10,218,219],{},"表现上看，网络测试是通的，但是下载对应的插件包就是失败。可是使用wget去下载对应的路径又能成功，由于报错语焉不详，无法进一步寻找原因，最后只能使用手工下载安装包并直接在后台手动安装的方式。",[10,221,222],{},"由于需要按照依赖来按顺序安装，所以需要一个一个的去自己找。应该是可以写成脚本的形式来自动进行的，只是由于只是稍微试用，就没有仔细纠结了。而且正常的话，就算手工安装也花不了多少时间。不如说搜索如何解决自动安装失败问题的过程反而花了更多时间……",{"title":177,"searchDepth":224,"depth":225,"links":226},2,3,[227,228,229,230,235],{"id":35,"depth":224,"text":36},{"id":98,"depth":224,"text":98},{"id":129,"depth":224,"text":129},{"id":158,"depth":224,"text":159,"children":231},[232,233,234],{"id":166,"depth":225,"text":167},{"id":180,"depth":225,"text":180},{"id":201,"depth":225,"text":201},{"id":210,"depth":224,"text":210},"2020-11-29","md",{"layout":239,"status":240,"published":241,"author":242,"author_login":243,"author_email":244,"author_url":245,"wordpress_id":246,"wordpress_url":247,"date_gmt":248,"excerpt":249},"post","publish",true,{"display_name":243,"login":243,"email":244,"url":245},"chaoshikari","chaoshikari@gmail.com","\u002F",3105,"\u002F?p=3105","2020-11-29 03:10:44 +0000",{"type":7,"value":250},[251],[10,252,12],{},"\u002F2020-11-29-jenkins-start-up",{"title":5,"description":12},"_legacy\u002F2020\u002F2020-11-29-jenkins-start-up",[24],"8AVPbbok7KLt85eHMjpFQ26ljPlbvyAGE-jLve80kCo",1788763178682]