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