在Mac OS X机器上设置Jenkins CI服务器的指南。您但愿在公司中拥有“移动持续集成”,而CI服务器的最终选择是Jenkins。若是您的公司规模很大,而且您很幸运,那么Dev Support或Dev Ops团队将为您完成全部繁重的工做并为您安装。可是,若是不是这种状况,您可能进入了一个能够帮助您的页面。java
首先,请避免安装Jenkins做为启动守护程序。有关详细的推理方法,请查看[本文](http://nsbogan.com/mobile ci/2015/02/01/mobile-ci-daemon-vs-agent)。git
Jenkins Wiki提供了用于Jenkins安装的选项列表,但没有说起Mac OSX。尽管它提到了Docker,但我只据说过有关Docker的好消息。在本文中,我将坚持使用自制软件。在继续操做以前[,您](http://nsbogan.com/mobile ci/2015/02/15/install-java-on-mac-os-x)须要[在Mac上安装和配置](http://nsbogan.com/mobile ci/2015/02/15/install-java-on-mac-os-x) JDK 。docker
要安装,请运行一个简单的shell命令。shell
brew install jenkins
Jenkins将被安装到其中,usr/local
而Homebrew实际上会当即告诉您如何将其转变为启动代理。服务器
To have launchd start jenkins at login: ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents Then to load jenkins now: launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
这建议您将Jenkins启动代理plist文件符号连接到,~/Library/LaunchAgents
但我建议不要这样作。正如您将在接下来看到的,您将须要修改该文件。这意味着,若是您曾经经过Homebrew升级Jenkins,则您在plist中所作的全部更改都将丢失。个人建议是复制它而不是创建符号连接。并发
更重要的是,一旦经过Homebrew安装后,我便将Jenkins升级委托给Jenkins自己。所以,我固定Homebrew以防止Homebrew升级Jenkins文件。app
brew pin jenkins
如今,您还能够手动控制Jenkins的安装,而且能够从命令行启动/中止它。ide
# Start. launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist # Stop. launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
要了解为何须要更改plist,请尝试运行Jenkins服务器。尝试一下,建立几个构建项目,这些项目具备一些基础知识,例如签出git仓库和运行简单的build命令。很快您会收到一条错误消息,提示詹金斯(Jenkins)内存不足。这彷佛是JVM和Mac OS X的常见问题,我不太肯定为何默认配置不能解决这个问题,可能这是Mac专用的,其余操做系统也能够。不管如何,您须要修改Launch Agent的默认plist文件。这是您须要的而且可能要更改的。ui
-d64
)。-Xms
和Xmx
标志设置最小和最大堆大小。512 Mb在大多数时间为我工做。<string> -d64 </ string> <string> -Xms512m </ string> <string> -Xmx512m </ string> <!-使用并发GC-> <string> -XX:+ UseConcMarkSweepGC </ string> <string> -XX:+ CMSClassUnloadingEnabled </ string> <string> -XX:MaxPermSize = 256m </ string>
迄今为止,最大的问题和挫折源是公司代理。使用-D
选项指定它。操作系统
<string>-Dhttp.proxyHost=my-company-proxy-host.com.au</string> <string>-Dhttp.proxyPort=8080</string>
在URL中带有自定义前缀的自定义端口上运行Jenkins。本示例使用默认8080
端口和/jenkins
前缀,所以您能够像http://yourhostname:8080/jenkins
或以往那样访问您的Jenkins仪表板http://youthostname/jenkins
。这些参数须要传递给jenkins.war
Homebrew安装到的参数/usr/local/opt/jenkins/libexec
。
<string>-jar</string> <string>/usr/local/opt/jenkins/libexec/jenkins.war</string> <string>--httpListenAddress=127.0.0.1</string> <string>--httpPort=8080</string> <string>--prefix=/jenkins</string>
若是计算机从新引导,请启用“RunAtLoad”选项以自动启动服务器。
<key>RunAtLoad</key> <true/>
若是此plist中的任何命令须要环境变量,这就是定义它们的方式。
<key>EnvironmentVariables</key> <dict> <key>HTTP_PROXY</key> <string>http://my-company-proxy-host.com.au:8080</string> </dict>
重定向标准输出和标准错误由您决定。虽然听起来是个好主意,但我建议不要将stderr重定向到文件中。我曾经不得不处理Bamboo远程代理在几个月后建立的90 Gb日志文件。
<!-- <key>StandardOutPath</key> <string>/Users/i4niac/.jenkins/log/output.log</string> --> <key>StandardErrorPath</key> <string>/Users/i4niac/.jenkins/log/error.log</string>
请注意,Jenkins将其文件放在.jenkins
用户主目录下的文件夹中。处理启动代理程序插件时,还必须指定完整路径。log
若是尚未文件夹,请建立它。
如今放在一块儿。
<?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>Label</key> <string>homebrew.mxcl.jenkins</string> <key>ProgramArguments</key> <array> <string>/usr/bin/java</string> <string>-server</string> <string>-d64</string> <string>-Xms512m</string> <string>-Xmx512m</string> <string>-Dmail.smtp.starttls.enable=true</string> <!-- Use Concurrent GC--> <string>-XX:+UseConcMarkSweepGC</string> <string>-XX:+CMSClassUnloadingEnabled</string> <string>-XX:MaxPermSize=256m</string> <string>-Djava.net.preferIPv4Stack=true</string> <string>-Dhttp.proxyHost=my-company-proxy-host.com.au</string> <string>-Dhttp.proxyPort=8080</string> <string>-jar</string> <string>/usr/local/opt/jenkins/libexec/jenkins.war</string> <string>--httpListenAddress=127.0.0.1</string> <string>--httpPort=8080</string> <string>--prefix=/jenkins</string> </array> <key>RunAtLoad</key> <true/> <key>EnvironmentVariables</key> <dict> <key>HTTP_PROXY</key> <string>http://my-company-proxy-host.com.au:8080</string> </dict> </dict> </plist>
如今,您有了运行24/7并执行稳定CI任务的可靠Jenkins服务器。
要找出Jenkins的启动方式,请查看grep活动进程列表。ps aux | grep java
输出将告诉您全部您须要了解的内容。
jenkins 85 0.0 3.8 4633552 636852 ?? Ss Tue02pm 20:11.30 /usr/bin/java -Dfile.encoding=UTF-8 -XX:PermSize=256m -XX:MaxPermSize=512m -Xms512m -Xmx512m -Djava.io.tmpdir=/Users/Shared/Jenkins/tmp -Dhttps.proxyHost=my-company-proxy-host.com.au -Dhttps.proxyPort=8080 -Dhttp.proxyHost=my-company-proxy-host.com.au -Dhttp.proxyPort=8080 -jar /usr/local/opt/jenkins/libexec/jenkins.war --prefix=/jenkins --httpPort=8080
使用Homebrew安装,配置为启动代理。配置远非最终的。您将必须安装插件,为git存储库配置SSH密钥,并执行许多其余管理任务,以使您的Jenkins CI盒更快。