美文网首页程序员日常
Jenkins 100次构建失败踩坑全录(一)

Jenkins 100次构建失败踩坑全录(一)

作者: 听风轻咛 | 来源:发表于2017-12-08 17:28 被阅读174次

    标签(空格分隔):work


    本文将以问题与解决方案的方式对Jenkins构建过程中的问题进行收录,后期会在评论中持续收集,如果有相同情况,请自行对照解决;

    本文参考:
    手把手教你利用Jenkins持续集成iOS项目
    http://www.jianshu.com/p/41ecb06ae95f
    关于iOS-Jenkins进行持续集成项目部署
    http://www.jianshu.com/p/54c7daae6c94
    iOS持续集成:Jenkins篇
    http://www.jianshu.com/p/faf879b3d182

    关卡1 :

    安装Jenkins:首先你的电脑得有一个Java环境,接下来安装Jenkins。你可以直接去Jenkins入口网站,查看安装方式;
    当然你也可以使用以下方法:

    • 安装homebrew
    $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
    • 安装jenkins
    $ brew install jenkins
    

    安装成功后需要开启jenkins服务;

    关卡2 :

    开启Jenkins服务:确认jenkins已安装,在终端进入到jenkins安装目录下,会有一个叫做jenkins.war的文件,

    $ java -jar jenkins.war
    

    或者在终端输入:

    $ jenkins
    

    当出现:


    image_1c0ptnl2j13mh1mn2hmk18qf7usp.png-188.1kBimage_1c0ptnl2j13mh1mn2hmk18qf7usp.png-188.1kB

    服务已经就位,可以开始进行配置了;

    这里还有两个命令用于jenkins开启和停用(Mac上):

    $ sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
    $ sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
    

    如果是linux上也可以这样:

    $ sudo systemctl status jenkins.service
    $ sudo systemctl start jenkins.service
    

    不过实际操作过程中,可能会出现停用失败的情况,我的做法是直接打开活动监视器,在里面搜java服务,强制关闭掉;这里需要注意,如果服务没有停止再进行jenkins开启是不成功的,提示会告诉你已经在用:

    image_1c0pu09in491qq31bqs25f1hbg26.png-222.9kBimage_1c0pu09in491qq31bqs25f1hbg26.png-222.9kB

    如果你想查看是否jenkins在运行,使用命令查看:

    $ ps aux | grep jenkins
    

    关卡3 :

    安装并开启完成就可以在浏览器里输入localhost:8080进行页面化配置了;
    安装完成之后,Safari可能会自动打开,如果没有自动打开,打开浏览器,输入http://localhost:8080

    image_1c0pvjgjqfbg3i01c371uhc1ves2j.png-27.6kBimage_1c0pvjgjqfbg3i01c371uhc1ves2j.png-27.6kB

    这个时候可能会报一个错误。如果出现了这面的问题。出现这个问题的原因就是Java环境有问题,重启Java环境即可。

    这个时候如果你重启电脑会发现Jenkins给你新增了一个用户,名字就叫Jenkins,不过这个时候你不知道密码。你可能会去试密码,肯定是是不对的,因为初始密码很复杂。这个时候正确做法是打开http://localhost:8080 会出现下图的重设初始密码的界面。

    image_1c0pvl71n5dulcc413164i1hcp30.png-30.4kBimage_1c0pvl71n5dulcc413164i1hcp30.png-30.4kB

    按照提示,找到/Users/Shared/Jenkins/Home/ 这个目录下,这个目录虽然是共享目录,但是有权限的,非Jenkins用户/secrets/目录是没有读写权限的。

    image_1c0pvm8al1tce1iled5voi216ac3d.png-200.2kBimage_1c0pvm8al1tce1iled5voi216ac3d.png-200.2kB

    打开initialAdminPassword文件,复制出密码,就可以填到网页上去重置密码了。如下图

    image_1c0pvp2p01fon1h2mmvjs6s1fuj3q.png-99.6kBimage_1c0pvp2p01fon1h2mmvjs6s1fuj3q.png-99.6kB

    一路安装过来,输入用户名,密码,邮件这些,就算安装完成了。

    还是继续登录localhost:8080

    然而这一关还没有结束:
    写blog的时候我把自己设置的帐号注销了,然而当时设置的密码却忘记了,怎么都想不起来,怎么办呢?
    首先我想能不能用之前给的Jenkins帐户呢,经试错,未果;
    接下来上百度查了几种方法,有的方法很复杂,不打算用,我们只用最简单粗暴的;只要之前的帐号信息没有丢失,又可以进入系统就OK了,于是:

    image_1c0q0bnonde9a9omqa1092a1747.png-85.9kBimage_1c0q0bnonde9a9omqa1092a1747.png-85.9kB

    注意实际操作过程中发现不是/User/Shared/Jenkins/Home下的config.xml,也不是/User/Shared/Jenkins/Home/users下的config.xml,而是你自己用户目录~/.jenkins/下的config.xml,具体原因可能是jenkins运行的工作空间是当前用户目录下的.jenkins,然后就是这样:

    image_1c0q277tu152r9mg1dhg1edq8jp5q.png-55.9kBimage_1c0q277tu152r9mg1dhg1edq8jp5q.png-55.9kB

    经检验,无误,可进入,但是好像遗留了一个问题,就是这样进入的话就找不到管理用户的选项了;解决问题,勾选图中黄色圈,返回系统管理,出现管理用户(还是个隐藏道具);


    image_1c0q3ukis1vlhib71uij1729ohs67.png-33.1kBimage_1c0q3ukis1vlhib71uij1729ohs67.png-33.1kB image_1c0q419b0164pqfe25d9br1fpt74.png-39.8kBimage_1c0q419b0164pqfe25d9br1fpt74.png-39.8kB image_1c0q42m3mvf41d8fjs21ptb1ae77h.png-11.4kBimage_1c0q42m3mvf41d8fjs21ptb1ae77h.png-11.4kB

    搞的像是特工登录非授权帐户一样,不管怎么说,总算是攻破了,进入下一关;

    关卡 4:

    先不管工程构建里那一堆设置,我们先来搞一下证书Cer,钥匙Keychain,配置文件Provisioning Profiles的一些问题:
    首先去系统管理 -> 管理插件 -> 可选插件,搜索并安装Keychains and Provisioning Profiles Management插件;
    进入插件:


    image_1c0qeblep1tcj4m319ap1bek783ah.png-31.1kBimage_1c0qeblep1tcj4m319ap1bek783ah.png-31.1kB

    不要关键去填下面的空,我会告诉你这是一道有选项的题目;进入文件目录,Command + shift + G,写下这样的路径~/资源库/Keychains

    image_1c0qekdqp9v712rd1gefjdr1fdcbe.png-62.2kBimage_1c0qekdqp9v712rd1gefjdr1fdcbe.png-62.2kB

    这里我们把login.keychain-db上传到Jenkins里,但是Upload并不能上传这样后缀的文件,所以需要你手动把login.keychain-db修改成login.keychain(复制后再修改,以防止其他地方会引用到带-db);上传完成后就会在下面出现你一些信息;然后打开你的钥匙串,这个知道在什么地方吧;

    image_1c0qet898q8m118mk2s6kj1cq5eb.png-131kBimage_1c0qet898q8m118mk2s6kj1cq5eb.png-131kB

    点击打包所用到的证书,将红色框中的名称复制出来,添加到identities中;

    image_1c0qf02rofnpc3r121c1nlb1mqteo.png-42.7kBimage_1c0qf02rofnpc3r121c1nlb1mqteo.png-42.7kB

    如果有多个,则点击Add Code Signing Identity添加;

    然后是PP文件,这些文件需要我们从系统PP文件夹下复制到Jenkins资源文件夹下,如下图两个路径:
    这个是系统PP文件目录


    image_1c0qkdte41j1rgq81k8v1bi19f4f5.png-144.2kBimage_1c0qkdte41j1rgq81k8v1bi19f4f5.png-144.2kB

    这个是Jenkins PP文件目录


    image_1c0qkkk833p0nt18andthn9qfi.png-79.2kBimage_1c0qkkk833p0nt18andthn9qfi.png-79.2kB

    Provisioning Profiles Directory Path 填写成,注意替换为自己的username:

    /User/{USERNAME}/Library/MobileDevice/Provisioning Profiles
    

    接着去你苹果帐号里去找你对应打包所需要的PP文件,然后点upload上传到Jenkins环境里;
    以上,证书部分解决;

    关卡 5

    创建项目过程我们会对各个需要的项进行逐个描述:
    点新建项目,输入项目名称,选择 构建一个自由风格的软件项目,然后确定,进入配置页面。


    image_1c0ql3ppk1bht1b5ms4hcui1jpjfv.png-8.2kBimage_1c0ql3ppk1bht1b5ms4hcui1jpjfv.png-8.2kB
    • General
      这个部分的内容都很浅显,没有什么可以说的,根据需要自行填充;这里说一下GitLab connection选项,因为我自己的工程是用gitlab管理的代码,所以需要在Jenkins里下一个Gitlab的插件,然后在里面进行帐号配置,可以采用帐号密码以及SSH的方式,具体这个部分会有一个SSH的坑,先不作分析,后面会讲到,我这里先用帐号密码的方式进行构建,经检验发现SSH方式非必要;

    Credentials在这里配置:

    image_1c0qljaq610ljc02k6g1r821fs5gc.png-78.2kBimage_1c0qljaq610ljc02k6g1r821fs5gc.png-78.2kB
    • 源码管理
      这里我选的Git,Repository URL填你工程的git地址,选用帐号密码的形式应该是以http或https开头的,Credentials填你在上一步中新建好的,
      image_1c0qlt20313duogl2g51hp11nqsgp.png-73kBimage_1c0qlt20313duogl2g51hp11nqsgp.png-73kB
      Branch Specifier (blank for 'any') 填你要进行构建的分支,我这里是*/release

    这里我们PS一个隐藏BOSS:

    returned status code 143 jenkins
    ERROR: Error fetching remote repo ‘origin’
    

    这个报错是工程配置结束后进行构建后提示的,我当时搞这个发现远程代码明明是已经拉取到本地的,只是在拉取过程中会发生中断,本人在进行了将近50次试错后发现这个拉取到本地的代码率是变化的,先前以为是SSH帐号的问题,于是转头花了一天的时间搞了下SSH,后来SSH搞通后发现该问题仍然存在,后来终于在经历百度,谷歌,搜狗也用上的(不得不说有时候百度搜不出来的搜狗能搜到),发现了几篇有用的,后来解决,也算是不负辛苦,后面有踩坑的伙伴多注意,前车之鉴后事之师;

    http://blog.sina.com.cn/s/blog_72ef7bea0102vo9w.html
    https://issues.jenkins-ci.org/browse/JENKINS-20445
    https://stackoverflow.com/questions/35069079/jenkins-git-plugin-timeout-when-try-to-pull-repositoty-using-ssh

    解决方案就在于这个Timeout,相信你看了这个单词就知道是怎么回事了:

    image_1c0qmnlafh2p1j571b4ettv1ncah6.png-74.3kBimage_1c0qmnlafh2p1j571b4ettv1ncah6.png-74.3kB

    另顺便粘一个code 128的链接,是个与该问题相关的问题,因为这些问题关键字有的重复,所以搜出来的文章有时会误导,所以请仔细辨别:

    returned status code 128 jenkins
    ERROR: Error cloning remote repo 'origin'
    stderr: Permission denied (publickey).
    

    http://wantcoding.com/?p=293
    这个链接是附送的,进去多看看你会有惊喜,还有QQ群哦

    相关文章

      网友评论

        本文标题:Jenkins 100次构建失败踩坑全录(一)

        本文链接:https://www.haomeiwen.com/subject/ysxyixtx.html