持续集成jenkins环境部署中遇到的那些坑

新闻ios

  1. Keychain和证书的坑:jenkins安装之后会自动生成一个jenkins账号.但是我们当时是在ios账号下工作,必须把keychain和证书拷贝到jenkins的文件夹下,才能有权限读取.

  2. Schema:当时一直报错说没有schema文件,后来在xcode中,把我们需要的schema文件勾选中就解决了.

  3. 打包仍然不成功,查问题发现是xcode的版本和ios系统没有更新.于是更新了一下ios和xcode版本.这一下不要紧,jenkins的主目录从系统共享下的jenkins文件夹变成了ios账号下的.jenkins文件夹. 所以进去之后发现所有的配置全部清零了.但当时并不知道是因为jenkins的主目录更换了. 所以又重新配了一遍所有的环境和证书.

  4. 然后这时ssh校验又通过不了了.跟以前的配置一摸一样完全没有改动,但怎么都报错.在terminal中用ssh -T 去连接却是通的.这时候又崩溃了.根据报错查了很多资料,但是很多情况都会报这种错误,根本没法定位到问题.最后也是在一个英文的犄角旮旯的网站上看到说,如果mac的系统更新了,jenkins必须退出重启服务,ssh才能连上.重启之后果然好了...

  5. archive成功了,但生成包不成功.在jenkins控制台输出的日志中,直接原样copy命令在terminal中可以打包成功.最后也是找了很多很多资料,尝试了很多修改,都快要放弃了,打算执行命令行打包了.然后想到在jenkins中xcode的插件一直被人诟病说不稳定,于是上插件那里看了一下,发现正好有xcode插件的新版本需要更新.于是更新了一下.更新完之后打包成功…应该是因为xcode刚更新了一个版本,但我的插件没有更新,所以用插件打包导致失败.

其实ios的坑远不止这些,从一开始打包就是一直各种报错,不通过,这些雷都一一踩过来了.并且今后的打包也一定会存在各种各样因为ios系统更新和xcode版本产生的问题.所以,坑无止境.

新闻android

  1. 因为android和ios的代码在同一个gitlab下部署的,访问账号一个是lian哥的,一个是liao妹子的.所以本机必须配两个ssh,创建config文件指定访问关系.

  2. 装环境的时候,我直接按照网上说的下载了android的sdk和gradle的最新版本.但是后来开发说他们安卓的代码必须用gradle3.3打包才可以.他们有指定了gradle的版本,其他版本是打不过的.于是就用了gradlew build命令去打包,这个命令会自动去下载gradle3.3版本,和依赖包.但是也是一直打包失败.以为是gradle版本的问题,因为之前配了环境变量,指定了gradle的文件夹,所以决定把4.9的版本删除掉.但是删除之后,每次一build,就会在ios账号下生成.gradle文件夹,然后去下载一些4.9的东西.也是把4.9的东西能删的都删了,环境变量也删了,结果一 -v 每次出来都是4.9的版本信息.最后开发说这个应该是不影响3.3的下载和打包的.于是在打包时加了—info和--debug来查看打包的具体情况,发现是在下载某个依赖包时,总是循环一个建立连接,锁定,解除锁定的步骤.一直循环就是无法下载成功.找不到问题所在.开发说,他的linux机器没问题.但后来他发现那台机器打某一个分支的时候,跟我报了一样的错.该分支打包时的project从master的10个变成了12个,它需要下载新的依赖包.于是分析应该是下载时,建立连接不成功,网络问题.这时又来一个坑中之坑.因为这个报错之前一条日志,说的是开始建立ssl连接,于是我们以为是端口限制.之前滕菲跟我说过咱们公司封掉了所有ssh的22端口.而当时另一个开发说可能是封了ssl的443端口.于是我又去找运维问这件事,并附上了报错的截图.运维说,是的,公司封掉了这两个端口,你可以自己改一下.然后又在网上找资料修改这两个默认端口号.改完之后,错误依旧.于是我想,是不是这台机器的问题.因为开发的linux可以打master.于是我又分别在我的笔记本和台式机上进行了build.发现是同样的报错.排除了机器本身问题.然后我对自己说,能做的都做了啊,现在的问题已经不是我能解决的了,先放下避免浪费时间.结果转天开发就跟我说他之前失败的分支可以打成功了.于是我上去试了一下,之前下载依赖包那里果然过去了.嗯,就是咱们公司网络问题.楼下的锅.

  3. 本着好奇害死猫的精神,最后让我找到了gradle的主目录.原来这个苹果系统是搭建在unix系统下的,在苹果系统以外unix的某个文件夹下安装着gradle4.9.
    下面这个命令可以显示本机的gradle的安装路径
    brew info gradle
    但这我事先并不知道,而是在多次尝试中碰巧发现了这个命令执行后在某个位置输出了gradle的路径.
    马上干掉它! 然后再-v一下,好了.现在是3.3版本了.

视频android

  1. 视频安卓版本打包也有一个坑.就是ssh的连接.因为有了之前一个机器实现生成多个ssh匹配不同账号的经验,于是直接上了config文件把配置加进去了.然后发现,连接失败.这个连接失败的报错啊,跟之前ssh的问题一样,错误很简单,就是联不通,但是错误产生的原因是多种多样的,你很难在网上找到属于你的那个答案.在看了很多个回答和做了很多种尝试之后,依然是连接不上的.这个时候,先排除ssh key的问题.因为视频的代码是他们自己搭的在一个gerrit的平台上,跟github不冲突,所以我直接把ssh配成了之前本机最原始的ssh,然后把config文件改了一个乱七八糟的名字.这个时候ssh应该是不会去访问这个config文件了,然后惊喜的发现这一次连接成功了.那么就一定是config文件配的有问题.但是又并不知道问题在哪里.也是多方查找config文件的模版,终于让我找到一个人说,如果有端口号的话需要配置Port参数.是的,视频的git地址是带端口号的.这个端口号在host参数上直接在域名后面挂上冒号端口号,可能是不识别的.于是果断加上Port参数.然后就,真的成功了…所以,当本机需要指定多个ssh时,在config文件中,如果访问地址有指定的端口号,需要增加Port参数,否则会访问失败.

其他:

  1. 刚装上jenkins之后,发现连网线的机器可以正常访问,但无线网的笔记本都无法访问.各种猜测和尝试之后都不好使,于是决定改一下端口号.网上能搜到的普遍的改端口号的方法对这台服务器都无效.改了很多次,最后找了一个不一样的方法,强制在启动时修改端口号,成功.并且改了端口号之后,无线网的机器也真的能访问了...
    Jenkins默认的端口号是8080,修改方法:
    1. 打开终端,cd 到Jenkins的安装目录(即jenkins.war所在目录),如:D:\Program Files (x86)\Jenkins
    2. 执行命令:“java -jar jenkins.war --ajp13Port=-1 --httpPort=8081”
    其中8081就是新的端口号,也可以设置为其他的端口。

  2. 用ios-deploy 安装包

https://segmentfault.com/a/1190000010205616

https://www.npmjs.com/package/ios-deploy

https://testerhome.com/topics/12672

最后用了这个命令成功:

先获取duid:

ios-deploy -c

然后先uninstall已安装的app,再执行安装:

ios-deploy --id XXX -r --bundle_id ifengNews -b /Users/iOS/.jenkins/....../ifengnews.ipa

查看连接设备

Instruments -s devices

你可能感兴趣的:(持续集成jenkins环境部署中遇到的那些坑)