美文网首页CI CD
Jenkins+fastlane在iOS开发中的基础使用

Jenkins+fastlane在iOS开发中的基础使用

作者: iDeveloper | 来源:发表于2018-01-15 23:18 被阅读1471次

Jenkins是一个基于Java的开源持续集成工具。

本文采用是fastlane的脚本构建方式。

关于Xcode integration插件的构建方式。

Jenkins基础环境搭建

注意事项:开发软件的环境搭建应尽量按照官方的步骤。有的开发者,学习一样新东西,直接网上一搜,找一个第三方教程来走,结果遇见更多问题。

Jenkins的官方Guided Tour

Guided Tour
  • 安装Java8,使用终端安装
  1. 检查java版本

~java -version
No Java runtime present, requesting install.
表示未安装Java。

  1. 安装java8

~brew cask install java8
java8,必须带8,不然就会安装java最新版本java9。
如果未安装brew,请先安装brew

Error: Cask 'java8' is unavailable: No Cask with this name exists.
出现此错误,使用下面命令解决。
~brew tap caskroom/versions

Java 安装

安装期间会要求输入管理员密码。


输入密码
安装完成

再查询版本


查询版本
  • 安装Jenkins,从官网下载安装。
    有长期支持的稳定版,每周发布的开发版,以下是以稳定版2.89.2为例。
    下载pkg安装

安装完毕后,浏览器自动打开解锁界面。


Unlock Jenkins

拷贝上面的地址

~ vim /Users/lazy-ios2/.jenkins/secrets/initialAdminPassword
使用vim打开。

password

上面红框里的就是password,拷贝粘贴后,Continue。

安装推荐插件

选左边安装推荐插件,耐心等待。

设置管理员账户

首次进入Jenkins,先进去系统管理,设置好管理员权限。

Jenkins不会默认设置当前管理员用户的管理员权限。
导致登录失效后,就无法登录此账户了,真麻烦~

  1. 进入全局安全配置。


    系统管理
  2. 修改授权策略为安全矩阵,添加用户iostest(刚刚注册现在登录的用户)。


    授权策略
  3. 设置管理员用户为管理员权限,保存。


    完成权限修改
  • 添加用户
  1. 系统管理->管理用户->新建用户


    创建用户

    例如为测试人员创建只读和运行权限的用户。

  2. 系统管理->全局安全配置->授权策略


    配置权限

    Overall选择Read,其他权限选项按需选择。

还有其他授权策略,如项目矩阵授权策略,基于项目的授权方式,相对安全矩阵配置更灵活,当然配置也相对复杂,没有很多的实践经验,在这里不赘述。

Jenkins创建任务(job)

细心的童鞋会发现,Jenkins的Use-cases没有iOS。
只能自己找第三方教程和摸索,真麻烦~


Use-cases

使用构建一个自由风格软件项目为例。


自由风格的软件项目
  1. 项目的基础设置,按需设置吧,不明白点击后面的问好,有相关说明。


    image.png
  2. 源码管理
    正常来说,公司都有自己的代码仓库,这里以git为例。
    输入git地址,发现没有权限。
    点击图中的add进行添加私钥。
    git管理
    进入.ssh目录
    rsa私钥
    vim打开对应的rsa私钥文件,选中全部,拷贝。
    rsa
    回到Jenkins,点击add添加私钥,选则Jenkins。
    添加私钥
    选择ssh类型。有账户密码的话,要在Username和Passphrase输入账户密码。本例中未设置,故无需输入。
    ssh
    选择创建的Credentials,成功后红色错误提示消失。
    选择Credentials
    最后别忘了选择构建的branch。
    超时时间
    首次拉去代码时间较长,建议设置30分钟超时时间。
  3. 构建触发器


    构建触发器

    可以设置触发构建的事件,当前没有这种需求,当测试人员有需要的时候,再由测试人员去手动构建。 触发事件本身还是很有用的,尤其是Poll SCM,可以设置固定时间点构建。

  4. 构建环境


    构建环境

    由于使用fastlane打包,不用设置,直接跳过。

  5. 构建 (Execute shell,添加Shell脚本构建)
    Jenkins是在Jenkins用户环境下构建的,必须将构建需要的东西同步到Jenkins用户环境。
    所以这里有两个脚本,一个同步Keychain和Provisioning Profiles。
    一个fastlane构建。
第一个同步脚本如下:
#!/usr/bin/expect

set timeout 10
spawn su - test -c "sudo rm -rf /Users/Shared/Jenkins/Library/MobileDevice/'Provisioning Profiles'"
expect "Password:"
send "123456\r"
expect "Password:"
send "123456\r"
expect eof
wait

set timeout 10
spawn su - test -c "sudo mkdir -p /Users/Shared/Jenkins/Library/MobileDevice/'Provisioning Profiles'"
expect "Password:"
send "123456\r"
expect "Password:"
send "123456\r"
expect eof
wait

set timeout 10
spawn su - test -c "sudo cp -r /Users/test/Library/MobileDevice/'Provisioning Profiles' /Users/Shared/Jenkins/Library/MobileDevice"
expect "Password:"
send "123456\r"
expect "Password:"
send "123456\r"
expect eof
wait

set timeout 10
spawn su - test -c "sudo rm -rf /Users/Shared/Jenkins/Library/Keychains"
expect "Password:"
send "123456\r"
expect "Password:"
send "123456\r"
expect eof
wait

set timeout 10
spawn su - test -c "sudo mkdir -p /Users/Shared/Jenkins/Library/Keychains"
expect "Password:"
send "123456\r"
expect "Password:"
send "123456\r"
expect eof
wait

set timeout 10
spawn su - test -c "sudo cp -r /Users/test/Library/Keychains /Users/Shared/Jenkins/Library"
expect "Password:"
send "123456\r"
expect "Password:"
send "123456\r"
expect eof
wait

set timeout 10
spawn sudo security set-key-partition-list -S apple-tool:,apple: -s -k 123456 /Users/Shared/Jenkins/Library/Keychains/login.keychain-db
expect "Password:"
send "123456\r"
expect eof
wait

由于Jenkins用户权限问题,需要使用管理员账户来执行同步命令。
使用管理员账户自然会询问密码,所以要使用expect。
最后一个解锁keychain,让Jenkins用户能够读取并使用keychain中的证书来进行签名CodeSign,所有使用Jenkins用户来执行改命令。

第二个打包脚本
#!/usr/bin/env bash

export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120

rm -rf /Users/Shared/Jenkins/Library/Developer/Xcode/DerivedData
******隐藏代码******
fastlane gym -w ${buildProjectDir}lazyaudio.xcworkspace --clean -o ${buildDir} -s lazyaudio -n "${buildIpaName}.ipa" -q ${buildConfigStr} --export_method ${exportMethod} -a
******隐藏代码******

lftp << EOF
open ftp://xxxxxx:xxxxx@xxx.xxx.x.xxx
mkdir ${ftpPath}
cd ${ftpPath}
lcd ${ftpIpaPath}
mput *
close
bye
EOF

打包脚本和项目本身的配置联系紧密。
为了避免干扰,打包脚本只截取部分通用代码。
前3个export是必须的,好像是有中文的原因,否则Jenkins不认脚本。
第4个是设置超时时间,fastlane的默认配置,容易超时导致构建失败,强烈建议加上。
然后就是配置fastlane,以及fastlane打包部分。


环境变量

编写脚本前,必须了解环境变量,这里就不赘述了。
最后ftp上传构建的ipa等,使用的是lftp。新macOS把ftp默认从系统中移除,如需要自己安装。

测试构建

  • 构建前,必须确保在管理员账户(这里是test账户)下,可以正常使用fastlane打包。
  • 构建失败,fastlane not found。
    Jenkins找不到fastlane命令,要为Jenkins设置PATH,让它用上fastlane。
PATH
在终端输入echo $PATH,打印PATH,拷贝。
全局属性
系统管理->系统设置->全局属性->环境变量,输入键PATH,值就是刚刚拷贝的字符串。
  • 构建失败, codesign failure。
    签名失败,通常是keychain解锁失败导致。因为创建Jenkins用户,默认并没有为它设置密码,导致它无法请求管理员权限来解锁keychain。


    设置Jenkins用户密码

    使用sudo passwd jenkins来设置Jenkins用户密码。

  • 构建失败,cannot find xxx scheme
    xcode command line找不到scheme,需要在Xcode设置scheme为shared,commit相关变更,push代码。


    shared scheme

    scheme的生成是依赖Xcode GUI,仅靠xcode command line不能生成scheme来构建。

  • 两个构建并行执行,构建速度慢
    系统管理->系统设置->执行者数量 设置为1,就不会同时进行多个构建。


    执行者数量
  • 让其他用户访问Jenkins


    IP地址

    锁死本机的IP地址,其他用户可以通多访问192.168.x.xxx:8080来使用Jenkins。


    配置IP
    系统管理->系统设置->Jenkins Location
    配置好地址,管理员邮件地址。在下面的邮件通知用得上。

邮件通知

  • 系统管理->系统设置->邮件通知


    Jenkins自带邮件通知

    配置发邮件的邮箱,建议新建一个Jenkins专用的邮箱,图中是腾讯的企业邮箱为例。配置好通过发送邮件测试邮件测试配置。

  • 系统管理->系统设置->Extended E-mail Notification(这个是建议插件中的一个,比Jenkins自带的邮件通知要强大)。


    Extended E-mail Notification

    将Jenkins自带邮件通知测试通过的配置,填入上面。
    然后设置默认收件人,多个用空格隔开。

构建后操作

回到任务配置中,最后一个构建后的操作。

  • 收件人列表设置


    Editable Email Notification
    默认收件人

    除了默认收件人,可以添加其他需要被通知到的收件人,多个用空格隔开。

  • 回复人设置


    回复列表

    回复列表,是指,如果有人回复了Jenkins发的邮件,直接回给哪些人(邮件),而不是Jenkins本身邮箱,Jenkins邮箱只有发邮件的功能。
    当然也可以在系统设置中设置默认回复列表。


    回复列表的作用
  • 内容设置


    构建后邮件设置

    Default Subject和Default Content也是类似的,按需要设置。
    可以查看Content Token Reference来具体设置。

  • Advance setting邮件发送触发配置。


    失败设置

    默认只有失败才发送。


    触发设置
    各自按需设置,根据触发条件不同,又能单独配置收件人列表,回复人列表以及内容。很强大有木有?

卸载Jenkins

在自己电脑实践Jenkins够了,想删除了。
使用Jenkins自带Uninstall.command来删除。
路径/Library/Application Support/Jenkins/Uninstall.command

卸载Jenkins

相关文章

网友评论

    本文标题:Jenkins+fastlane在iOS开发中的基础使用

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