CI CD

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

2018-01-15  本文已影响1471人  iDeveloper

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

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

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

Jenkins基础环境搭建

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

Jenkins的官方Guided Tour

Guided Tour
  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 安装

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


输入密码
安装完成

再查询版本


查询版本

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


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默认从系统中移除,如需要自己安装。

测试构建

PATH
在终端输入echo $PATH,打印PATH,拷贝。
全局属性
系统管理->系统设置->全局属性->环境变量,输入键PATH,值就是刚刚拷贝的字符串。

邮件通知

构建后操作

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

卸载Jenkins

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

卸载Jenkins
上一篇下一篇

猜你喜欢

热点阅读