Mac jenkins 开机启动设置
更新一把,脚本的方式虽然可以做到开机启动的功能,但是始终有一个命令行程序在前台,非常不爽。
尝试通过Mac系统下的sudo launchctl load 命令完成Jenkins的开机启动功能。
一、launchctl load方式开机启动
参考其他的服务可以知道,Mac系统下的 /Library/LaunchAgents 和 /Library/LaunchDaemons 目录是用来存放一些开机启动的服务的plist。
那么homebrew安装的Jenkins是否可以通过这个方式来做呢?
homebrew启动分析
我们注意到,在homebrew安装完成的时候,提供了两个启动Jenkins的方式
install使用 brew services start jenkins 开启的时候,其实是使用 /usr/local/Cellar/jenkins/2.61/homebrew.mxcl.jenkins.plist 这个plist文件完成的,打开这个文件可以我们看到
plist可以看出来,服务是通过 /usr/bin/java 来启动的,目标任务就是/usr/local/Cellar/jenkins/2.61/libexec/jenkins.war
启动成功后可以看到
start使用launchctl load启动
尝试通过以下命令来开启服务
sudo launchctl load -w /usr/local/Cellar/jenkins/2.61/homebrew.mxcl.jenkins.plist
提示权限不足,Path had bad ownership/permissions ,使用下面的命令配置权限
sudo chown root /usr/local/Cellar/jenkins/2.61/homebrew.mxcl.jenkins.plist
在此执行的时候成功了。
打开localhost:8080准备配置的时候,发现了问题
和之前启动的不是同一个服务,WTF!
原来在Jenkins安装的时候,默认会在当前xxxx用户和root用户下都生成一份工作目录,launchctl load 默认拉起的是root下的。
修改环境变量
这时候需要在plist文件中加入JENKINS_HOME的配置
<?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>EnvironmentVariables</key>
<dict>
<key>JENKINS_HOME</key>
<string>/Users/xxxxxxxxxxxxxx/.jenkins</string>
</dict>
<key>Label</key>
<string>com.jenkins.jenkins</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/java</string>
<string>-Dmail.smtp.starttls.enable=true</string>
<string>-jar</string>
<string>/usr/local/Cellar/jenkins/2.61/libexec/jenkins.war</string>
<string>--httpListenAddress=127.0.0.1</string>
<string>--httpPort=8080</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
重新执行launchctl load,这个时候Jenkins就正常启动了
二、脚本方式开机启动
命令行安装的jenkins不自备开机启动功能,每次重启后都要命令行执行启动,非常麻烦,使用以下步骤可以在每次开机后自动拉起一个jenkins的命令行。
创建开机启动脚本 jenkinsBoot.sh
加入启动jenkins代码
1设置脚本权限
sudo chmod 777 xxxx/jenkinsBoot.sh
2设置脚本打开方式
3设置脚本引用,使脚本可执行
chmod +x xxxx/jenkinsBoot.sh
加入用户的登录项
4重新启动计算机,会发现自动执行了jenkinsBoot.sh这个脚本。