上次去吃火锅,被测试 call 说无法打包了,原来是上次有人用电脑,用完之后,忘记连接电源,导致电脑自动关机了,电脑再次开启的时候,Jenkins 反向代理没有开,导致无法打包(我们的 Jenkins 是部署在 阿里云上的,通过反向代理,代理到公司的一个 Mac 电脑上,从而进行打包)。当时也没有带电脑,导致我只好打车回去,去启动反向代理。搞好之后就配置了下开机自动启动,在这里记录一下,以免有人需要。
通过查阅文档可知,Mac 通过launchd
来启动服务
我们只需要在对应的目录,配置好 plist
文件即可,当 Mac 开机或者登录账户的时候,将会按照 plist
文件来加载我们指定的程序。
存放 plist
文件的目录有以下几个
1 2 3 4 5 6
| /System/Library/LaunchDaemons/ // 开机后加载 /Library/LaunchDaemons/ // 开机后加载 /System/Library/LaunchAgents/ // 用户登录后 /Library/LaunchAgents/ // 用户登录后 /Library/LaunchDaemons/ // 用户登录后 ~/Library/LaunchAgents/ // 用户登录后,自定义的 plist 可以放在这里
|
详细的 plist 文件的 key 和 value 可以通过 man launchd.plist
来查看,但必须包含以下几项
Label 一个字符串,用来标识要启动的程序,要求唯一
Program 指定一个 sh 脚本,或者一个可执行文件等
ProgramArguments 如果不指定 Program 的话,将依据这个参数来
KeepAlive BOOL 是否一直存活
通过 launchctl load ~/Library/LaunchAgents/com.your.launchjob.plist
来启动程序
通过 launchctl unload ~/Library/LaunchAgents/com.your.launchjob.plist
来终止程序
com.package.jenkinsAgent.plist 内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>KeepAlive</key> <true/> <key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/package/.rvm/gems/ruby-2.5.3/bin:/Users/package/.rvm/gems/ruby-2.5.3@global/bin:/Users/package/.rvm/rubies/ruby-2.5.3/bin:/Users/package/.fastlane/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/package/.rvm/bin</string> </dict> <key>Label</key> <string>com.package.jenkinsAgent</string> <key>Program</key> <string>/Users/package/autoRun/jenkinsAgent.sh</string> <key>RunAtLoad</key> <true/> <key>StandardErrorPath</key> <string>/Users/package/autoRun/jenkinsAgent.stdout.log</string> <key>StandardOutPath</key> <string>/Users/package/autoRun/jenkinsAgent.stdout.log</string> <key>WorkingDirectory</key> <string>/Users/package/jenkins_workspace</string> </dict> </plist>
|
在上述的 plist 文件中,我们指定了,在用户登录的时候,去执行 /Users/package/autoRun/jenkinsAgent.sh
脚本,并且设置了一些 log 输出到指定文件,设置了工作目录和环境变量。
/Users/package/autoRun/jenkinsAgent.sh 内容如下
1 2 3 4 5 6 7 8
| #!/bin/zsh --login export LC_ALL=en_US.UTF-8 echo $SHELL echo $PATH ruby -v rvm use 2.5.3 cd /Users/package/autoRun java -jar agent.jar -jnlpUrl http://jenkins-test-int.igetcool.com/computer/ios-package-node/slave-agent.jnlp -secret dce8bc948f8992da8499926eafcd88d80c395a62c24cf15b2a3adaeeaed593c2 -workDir "/Users/package/jenkins_workspace"
|
如果 sh 脚本不能执行,请添加权限 chmod +x jenkinsAgent.sh
我们这边用的 Jenkins + fastlane 来进行打包
由于使用的 fastlane,当我通过系统直接启动 Jenkins 反向代理,在 Jenkins 上打包的时候,会发现找不到 fastlane,其实电脑上已经装好了。在 Jenkins 打包的时候,我打印了下环境变量发现和直接在终端里打印的是不一样的,后来想可能是系统启动只会加载默认的环境变量,所以我在 com.package.jenkinsAgent.plist
加上了 EnvironmentVariables
相关的配置。后来在打包,就找到了 fastlane,但又发现ruby
版本不对,原来系统启动的时候,使用的系统自带的 ruby,导致 和 bundler
不匹配,这里切换下用户手动安装的 ruby 就可以了。
1 2 3
| rvm list ruby -v rvm use 2.5.3
|
当配置完成后,重启系统,Jenkins 反向代理将自动启动****