Macos配置Jenkins自动打包环境-iOS篇

最近准备着手搭建一些方便团队开发工作顺利进行的工具平台,首先就从Jenkins打包开始吧。其实关于ios的自动化打包文章在网上已经有N篇了,但我还是决定要写下这边文章,不是为了庆祝自动打包成功,而是为了记录在成功之前遇到的所有问题的梳理和总结,能够直接或者间接的帮助到需要的客官。


ok,那我们就开始正经的扯淡。

1. 安装Jenkins

此过程将一笔带过,毕竟安装起来还是很简单的,这个时候要有两种安装方式看起来比较厉害一种是Jenkins War包下载 ;另一种是利用Homebrew命令安装;

方式一:Jenkins War包 安装:(此种方式没有实际尝试,有问题的童鞋欢迎一起讨论)

命令录入:(此时注意Jenkins war包的路径问题,8080为端口号 也就是浏览器打开的地址:http://localhost:8080)

$ java -jar jenkins.war --httpPort=8080

方式二:Homebrew安装:

执行安装的命令

$ brew install Jenkins

Updating Homebrew...

==> Downloading https://homebrew.bintray.com/bottles-portable-ruby/portable-ruby-2.3.7.leopard_64.bottle.tar.gz

######################################################################## 100.0%

.... ... ... 

🍺  /usr/local/Cellar/jenkins/2.143: 7 files, 75.4MB, built in 3 minutes 43 seconds

出现上述内容,则证明安装完成

然后,链接 launchd 配置文件 形成了一个替身到指定目录中

$ ln -sfv/usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents

launchctl是一个统一的服务管理框架,启动、停止和管理守护进程、应用程序、进程和脚本

在这里利用launchctl来启动Jenkins,启动方式如下:

$ launchctl load~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

当然,可以启动,就可以关闭Jenkins,关闭方式如下:

$ launchctl unload~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

番外篇:(如果理解的不正确还请各位大神只交)

注意,这里的路径出现的可能较为混乱

1. 通过brew安装的Jenkins的目录为 /usr/local/Cellar/jenkins/2.143

2. 而我们在形成配置文件替身到LaunchAgents文件中的时候目录使用的usr/local/opt/jenkins

可以看到的是Cellar和opt目录下均存在了Jenkins,实际上:

通过Homebrew安装的程序会存放在Cellar目录中,同时也会被同步到opt目录中,可能有人会想到变量属性中的strong,也就是任何修改都会同步进行。

找到usr/local/opt/jenkins/*.plist 文件,可以看到指向的war包路径为opt/jenkins/libexec目录中,所以上面的形成的配置文件替身也指向了这里。

与此同时,为了让全局能够使用安装的程序,系统会生成软连接至/usr/local/bin目录下。

既然使用上面的启动命令将指向opt中的jenkins目录,并启动程序,那么Cellar目录中的jenkins是否也可以被调起?怀着这种想法,我在终端录入了:

$ jenkins

Running from: /usr/local/Cellar/jenkins/2.143/libexec/jenkins.war

如我所愿,果然调起了Cellar中的jenkins,通过此方式也证明了bin目录存在的意义;

而后经过两种启动方式的验证,账户和Jenkins里面的创建的Task和配置 均存在,也证明了任何修改均在Cellar和opt目录中会同步进行。


2. Jenkins的准备工作

(因为此篇文章是在Jenkins准备工作完成之后写的,为了偷懒,就直接用文字描述带过了,此过程相对简单;)

此时此刻,我们就可以开启有趣的Jenkins之旅了。打开浏览器,输入神圣的地址

http://localhost:8080

不过这个时候并没有出现欢迎的页面,而是让我们去配置密码(Administrator Password),根据页面上的路径的提示,在终端录入命令 cat + 路径 就可以得到一个密码串,把此密码复制粘贴到页面的输入框内

$ cat /Users/xxx/.jenkins/secrets/initialAdminPassword

接下来将需要去下载安装Jenkins插件,可以直接选择建议安装,当所有的插件都安装完毕之后再进行后续操作。

最后在配置一个admin user就万事大吉了。

在这个时候,我们期待的欢迎页面就出现了



3. 安装插件

各位客官可根据自己的需求去安装想要的插件,比如Gitlab插件、xcode integration插件等



4. 配置证书(重头戏-前奏)

配置Keychains和Provisioning

选择 系统管理-Keychains and Provisioning Profiles Management 


通过命令可以找到我们想要的keychains文件,上传login.keychain文件到网页中,如果没有此文件的也可将-db结尾的文件复制一份,删除“-db”即可上传

$ cd ~/Library/Keychains

$ ls

login.keychain-db login.keychain 

xxx xxx xxx(others files)

然后上传证书的描述文件,可通过 访达 - 前往 - 前往文件夹 来录入描述文件的路径来找到

不过,通过网页选择文件进行上传无法直接跳转到目标路径,那么我们只能一级一级的寻找,但是当我们找到资源库这一级别的时候,却发现找不到相关文件,那么这个时候就要使用快捷键将隐藏文件显示出来 shift+command+.  即可看到。

注意,可能电脑中存放了很多描述文件,一定要选择我们将要使用的文件,如果不放心,可以选择删除所有,重新下载必要的,以免弄混。


5. 新建任务(重头戏)

选择“新建任务” - “输入名称” - “构建一个自由风格的软件项目”  随后会进入配置页面

此节我们重点介绍 构建 的部分

源码管理

我选择了git作为项目源,在配置用户的时候先点击 钥匙图标的按钮添加git的用户名和密码,然后成功之后再选择你添加的用户,可能会有一下延迟,可等待一会

构建环境

配置Keychains and Code Signing Identities

配置Mobile Provisioning Profiles,选择和项目中相同的描述文件

构建(最后才到重头戏)

#写在最前面,一定要保证线上的项目证书是正确的和匹配的,因为现在每次构建都会下载最新代码到本地,我一开始以为不会,所以一直在修改本地项目的证书,结果很多次都在提示证书有问题,bundle id不匹配等,所以如果大家碰到了这种失败原因,请检查证书问题是否匹配

# 项目中target的名字,大家应该都很熟悉

TARGET_NAME="LKGesturePasswordProject" 


# app的名称,作为最后输出app和ipa包的名称

APPDISPLAY_NAME="LKGesturePasswordProject" 


# 项目中使用的证书的名称,和上面配置的描述文件一定要一致

CODE_SIGN="iPhone Developer: xx xx (xxxxxx)"


# build的路径

BUILD_DIR="${WORKSPACE}/build" 


# ipa存放的路径

IPA_DIR="${WORKSPACE}/ipa" 


# 之前碰到过一个fail 找不到LKGesturePasswordProject.xcodeproj文件,所以添加了cd命令进入到项目中

cd "${WORKSPACE}/LKGesturePasswordProject"


# clean-build-archive(项目中的三个过程)

# 注意:下文中用到了-project 和 .xcodeproj 字样,适用于没有用pods的项目,如果使用了pods请使用-workspace和.xcworkspace进行替换


# clean - 注意这里直接配置了Release(我们可以再工程中根据API环境的切换来配置多个在这里进行切换)

xcodebuild clean -project $TARGET_NAME.xcodeproj -scheme $TARGET_NAME -configuration Release


# 设置build号

xcrun agvtool new-version -all ${BUILD_NUMBER}


# 其次,执行build:(一个fail,报错找不到描述文件,所以我添加了PROVISIONING_PROFILE声明,不知道上面的配置如何生效)

xcodebuild -project $TARGET_NAME.xcodeproj -scheme $TARGET_NAME -configuration Release build BUILD_DIR=$BUILD_DIR BUILD_ROOT="${WORKSPACE}/buildRoot" CODE_SIGN_IDENTITY="$CODE_SIGN" PROVISIONING_PROFILE="xx-xx-xx-xx-xx"


# 创建输出目录

mkdir -p $IPA_DIR

cp -f -r $BUILD_DIR/Release-iphoneos/$TARGET_NAME.app.dSYM $IPA_DIR


# 最后,将app打包为ipa

/usr/bin/xcrun -sdk iphoneos PackageApplication -v $BUILD_DIR/Release-iphoneos/$APPDISPLAY_NAME.app -o ${WORKSPACE}/ipa/$APPDISPLAY_NAME${BUILD_NUMBER}.ipa


# fail - begin :PackageApplication找不到,也就是xcode中缺少了此文件

# 可自行搜索此文件并且下载放到此目录中 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/

# 执行命令

# $ sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/

# $ chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication

# fail - end


至此,就可以点击保存,进行构建了,成功之后将会看到我们期待已久的ipa包了。



持续更新中,向着成熟化进发。(欢迎各位大佬指点迷津)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容