一个典型的ios开发workflow一般会类似如下方式:
决定要开发的功能
写需求文档,增加一个gitlab的 Issue
Issue分配给开发者
开发者fork一个功能开发分支,多个开发者都向这个功能开发分支提交代码
功能开发完毕后,开发者提交一个pull request
当pull request创建以后,gitlab通过webhook通知Jenkins
Jenkins checkout这个pull request,然后设置pull
request的状态为"Building",这个状态会显示在gitlab中,其他开发者就知道当前不能合并。
Jenkins进行编译,单元测试等等,根据执行结果将pull
request的状态设置为"Success"或着"Failure"。
Jenkins向IRC channel发送一条消息关于构建结构。
如果构建失败了,开发者修改bug,然后重新提交代码,更新pull reques,然后再走一遍上边流程。
如果构建成功了,开始人工代码review,经过审核后,审核者负责合并pull request到主干代码。
gitlab向IRC channel发送一条消息,通知所有开发者代码已被合并。
在这简单说一下如何用jenkins自动打ios的包:
1.安装打包需要的工具
主要包括:JRE,gradle,maven,xcode(macOS),git
linux系统不说了,说一下macOS的:
安装xcode command line tools: xcode-select
--install
在弹出窗口选择“Install”,接下来的协议界面选择“Agree”
系统会自动下载安装。
安装homebrew :/usr/bin/ruby -e "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装git:brew update && brew install git
2.开启slave节点的ssh server,配置master通过ssh key登录
Linux不说了,macOS如下操作:
系统偏好设置->用户与群组->增加jenkins普通用户
系统偏好设置->共享->远程登录勾选->选择允许jenkins用户访问
将master上的Jenkins用户public key添加到mac上的:
sudo vi /Users/jenkins/.ssh/authorized_keys
sudo chmod 600 ~/.ssh/authorized_keys
如需修改sshd的配置文件: sudo vi /etc/sshd_config
3.在slave上创建workspace目录
mkdir /jenkins
chown jenkins.jenkins /jenkins
4.在Jenkins master上添加节点
为了编译iOS应用,需要如下Plugin:
SSH Slaves plugin
Keychains and Provisioning Profiles Management
XCode Integration Plugin
点击,系统管理->管理节点->新建节点
输入节点名字,例如"mac node",选中“固定代理”,输入详细配置信息:
名字: mac node
描述 : 用于构建ios应用
并发构建数:等于当前CPU的物理内核数量
远程工作目录:上一步骤创建的workspace目录
标签:mac ios
用法:只允许运行绑定到这台机器的Job
启动方式:Launch slave agents via SSH
主机: slave节点的IP或者FQDN
Credentials: 选择jenkins master的ssh私钥
Verification strategy: Known hosts file Verification
Strategy
可用性:尽量保持代理在线
-------分割线------
有时候为了做测试,在一台机器上会扮演好几个开发者。
在使用git的时候为了区分不同的开发者,需要区分不同的ssh key,下边是方法:
修改 ~/.ssh/config 类似下边这样:
Host gitlab-as-alice
HostName gitlab.company.com
User git
IdentityFile
/home/whoever/.ssh/id_rsa.alice
IdentitiesOnly yes
Host gitlab-as-bob
HostName gitlab.company.com
User git
IdentityFile
/home/whoever/.ssh/id_dsa.bob
IdentitiesOnly yes
IdentitiesOnly yes选项用来防止使用默认的key
然后我们在使用git的时候,要是用gitlab-as-alice和gitlab-as-bob代替原来的主机名:
git remote add alice git@gitlab-as-alice:whatever.git
git remote add bob git@gitlab-as-bob:whatever.git
-------分割线------
参考文档:
https://www.jianshu.com/p/f445983512b7
https://www.jianshu.com/p/70982c43c3d1
http://scmquest.com/jenkins-master-slave-setup-and-configuration-with-screenshots/
https://www.built.io/blog/how-to-set-up-customized-jenkins-for-ios
https://embeddedartistry.com/blog/2017/12/22/jenkins-configuring-a-linux-slave-node
http://osxdaily.com/2011/09/30/remote-login-ssh-server-mac-os-x/
https://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/#step-2
https://www.digitalocean.com/community/tutorials/how-to-build-android-apps-with-jenkins
https://macminicolo.net/dayone
https://blog.samsao.co/how-to-setup-a-jenkins-slave-running-mac-os-x-for-ios-projects-part-1-2937502ce90b
/questions/7927750/specify-an-ssh-key-for-git-push-for-a-given-domain