jenkins配置mac作为slave自动构建ios项目,并发布蒲公英

软件准备

测试环境:

本机环境&远程mac: macos 10.13
jenkins版本: 2.121.2
java: jdk8

远程连接到mac

被连接的mac端配置

  1. 需要开启mac的远程共享, 在’系统偏好设置’->’共享’中,把‘文件共享’,‘远程登录’,‘远程管理’都勾上

    详情中除了开机关机其他都可以勾上

  2. 远程登陆是运行ssh登陆,其实大部分都可以通过命令行管理了,开启远程桌面只是方便一点。

  3. ssh和远程共享需要在路由器中开启对应的端口, ssh是22,远程共享默认是5900.
  4. 如果不小心在远程电脑设置里关闭了远程管理,vnc连接就连不上了。但是只要ssh没有关,是可以通过命令开启的,ssh到远程mac电脑后
# 其中mypasswd是vnc设置的密码,改成自己的密码就可以了
$ sudo  /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -on -clientopts -setvnclegacy -vnclegacy yes -clientopts -setvncpw -vncpw mypasswd -restart -agent -privs -all

# 如果设置成功后不能应用到所有用户,还可以执行下面代码,不过我没运行这个就已经好了
$ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -off -restart -agent -privs -all -allowAccessFor -allUsers

客户端配置

  1. 使用vnc-viewer这个软件,可以支持各种系统连接mac,推荐使用这个,官网下载

安装jenkins

  1. 从官网下载pkg安装包
  2. 也可以官网直接下载war包用java启动https://jenkins.io/index.html,我选择的是用pkg包安装
  3. pkg安装时默认会把jenkins创建到jenkins用户下,这样会有很多权限问题,在安装时可以不选这个选项.

    但是不选这个,就不会创建自动登陆的脚本, 以后每次都需要手工启动了,当然这也不是大问题,把启动脚本写到.zshrc就可以了

安装jdk

  1. 可以用homebrew安装,不过这个需要默认的登陆用户,因此homebrew跟目录在/usr/local下,如果是为远程登陆专门创建的管理员账户,也是没权限更改这个目录的。
brew tap caskroom/versions
brew cask install java8

这里要注意 brew install java8是找不到安装源的

  1. 另外一种就是在oracle官网下载jdk8安装了,我目前选的这种方式,还是很方便的。

安装oh my zsh

安装oh my zsh:
1、克隆这个项目到本地(前提是你得有装git)

git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh

2、创建一个zsh的配置文件
注意:如果你已经有一个~/.zshrc文件的话,建议你先做备份。使用以下命令

cp ~/.zshrc ~/.zshrc.orig

然后开始创建zsh的配置文件

cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

3、设置zsh为你的默认的shell

chsh -s /bin/zsh

4、重启并开始使用你的zsh (打开一个新的终端窗口便可…)
至此,大功告成
更改zsh主题:
1、编辑 ~/.zshrc
2、修改

ZSH_THEME="ys"

注:主题文件在 ~/.oh-my-zsh/themes 目录

安装cocoapods

这个就不细讲了

安装svn客户端

  1. 下载smartsvn, 官网下载
  2. 主要是为了安装svn命令行,方便使用.

xcode工程命令行编译

  1. 配置好证书
  2. cocoapods的仓库需要更新,保证项目引用到的库都能下载到

证书准备

  1. 从Certificates下载开发签名iOS Development,或者用xcode打开一个ios项目并登陆自己的账号,会自动生成这个证书。
  2. 从本机导出provision证书的p12文件发送给远程mac机器
# 这里ssh端口做了22->23的映射
$ scp -P 23 com.yizs.jenkins.provision.p12 ywsj@jenkins-mac:~/tools/
  1. 除了导出,也可以自己在远程mac机器用自己的账号登陆developer.apple.com去下载。

jenkins 配置

启动配置

  1. 使用8080端口启动,如果需要外网访问暴露为slave,需要开通外网端口映射
java -jar /Applications/Jenkins/jenkins.war --httpPort=8080

必须的插件

  1. 第一次启动jenkins时,安装所有它推荐的插件
  2. 安装Xcode integration 插件

凭据配置

  1. 如果需要访问svn,git,docker等,需要先存储一个用户名密码作为全局凭据,后续可以通过脚本访问

创建ios jenkins 任务

我创建的是基于xcode integration插件的自由风格的任务,因此需要做一些配置,后续尝试使用全脚本的配置。

  1. 选择自由风格的项目
  2. 配置svn地址

    注意svn的check-out策略需要选use ‘svn update’ as much as possible,with ‘svn revert’ before update,svn revert是为了在下次构建前还原上次构建修改的文件,避免出现环境问题。



3. 在构建菜单,新增两个构建类型
1. 执行shell
2. Xcode
4. 源码下载后,执行podinstall 安装依赖库
#!/bin/bash -li
export LANG=en_US.UTF-8
pod install --verbose --no-repo-update && \
## 是不是必须要先open工程呢, 可以试试不要行不行
open yougc.xcworkspace

5. xcode插件配置

General build settings 中配置

TeamID , target,以及build前先clean, schema,target目录,release版本
1. TeamID , target,以及build前先clean

2. TeamID就来自于前面通过p12导入的iOS Distribution证书,在keychins中就可以看到这个TeamID

3. schema File在使用cocoapods的工程中是需要的,就是指向app所在的target
4. Export method 是ipa的打包方式,可以导出为 ‘development’, ‘ad-hoc’, ‘enterprise’ or ‘app-store’,如果有企业证书,发布测试版本到蒲公英就可以用ad-hoc
5. .ipa filename pattern 是ipa文件的格式,我这里写死了名字方便蒲公英上传时指定文件名
6. Output directory是编译结果的输出路径,就这个就可以了

Code signing & OSX keychain options

  1. 这个主要是设置证书读取用的,由于证书存储在keychains中,访问它需要输入登陆密码,因此这里需要设置unlock密码,输入的是登陆密码. keychains文件路径在
/Users/${youusername}/Library/Keychains/login.keychain-db
  1. 实际上这里设置了貌似也不行,后面执行xcodebuild时系统会弹出输入密码的提示,我的解决方案是手工执行一次xcodebuild命令,等弹出密码输入时,输入一次然后点”始终允许”

Advanced Xcode build options

  1. 这里主要配置工程文件的路径,当使用pods时,工程名是*.xcworkspace ,因此要在Xcode Workspace File这里输入路径

    注意这里文件路径不能加.xcworkspace,就写前面部分的路径就可以了

6. 构建成功后shell命令上传到pyger

  1. ukey 和 api_key在注册蒲公英后就可以自动生成,在这里看
IPANAME="yougc-jenkins"
curl -F "file=@${WORKSPACE}/build/${IPANAME}.ipa" -F "uKey=${your ukey}" -F "_api_key=${your apikey} https://qiniu-storage.pgyer.com/apiv1/app/upload

把远程mac配置为slave

  1. 参考文章
  2. 在本地机器[系统管理]->[节点管理]新建节点。

Name:可以随意命名,用来标记slave机器,我个人喜欢标记为slave机器的系统,比如server-ios
描述:随意,一般设置为slave机器的ip地址,后面新建任务指定slave节点时用这个描述作为slave的标志
of excutors:slave主机slave的并行数,即同时可以下发多少个job到slave上执行
远程工作目录:用来放工程的文件夹,jenkins master上设置的下载的代码会放到这个工作目录下。
标签:标签一般设置为slave 主机的IP
用法:选择“只允许运行绑定在这台机器的job”
启动方式: 选择Launch slave agents via SSH, 我参考的文章选择的是Launch agent via Java Web Start,这个选项默认是没有的,需要额外的配置,并且要生成一个jnlp拷贝到远程机器启动,感觉没有ssh方便。用ssh就填写ssh登陆用户名密码和主机地址就可以,如果非默认的22端口,就加上端口号.

  1. 在新建工程时,要使用slave构建,只需要在General中勾选”限制项目的运行节点”,并指定节点即可,参考文章是说的在”参数化构建”中新建Node再设置,我这里已经没这个选项了,可能文章是老版本了

问题总结

  1. 安装jenkins时,最好不要选择安装到jenkins用户,否则后面会有很多麻烦的权限问题,如果安装时已经选择了,可以通过修改配置文件把用户指向你当前的登陆用户。
    修改/Library/LaunchDaemons/org.jenkins-ci.plist中的内容,改成自己平时用的组和用户名。

    在哪看自己的用户名,参考这个

然后修改jenkins目录的宿主用户名

$ sudo chown -R userName:staff /Users/Shared/Jenkins
$ sudo chown -R userName:staff /var/log/jenkins

#重启Jenkins
$ sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

注意要用sudo vim 修改,然后再重启jenkins服务

  1. 关于keychains的配置,我在实际执行时,弹出了起码5次让输入登陆密码,所以这时候可以登陆到远程mac机器,看到有弹出就手工输入一下登陆密码,并且点”始终允许”, 就成功了

你可能感兴趣的:(devops)