在MacOSX機器上設置JenkinsCI服務器

在Mac OS X機器上設置Jenkins CI服務器的指南。您但願在公司中擁有「移動持續集成」,而CI服務器的最終選擇是Jenkins。若是您的公司規模很大,而且您很幸運,那麼Dev Support或Dev Ops團隊將爲您完成全部繁重的工做併爲您安裝。可是,若是不是這種狀況,您可能進入了一個能夠幫助您的頁面。java

安裝

首先,請避免安裝Jenkins做爲啓動守護程序。git

Jenkins Wiki提供了用於Jenkins安裝的選項列表,但沒有說起Mac OSX。儘管它提到了Docker,但我只據說過有關Docker的好消息。在本文中,我將堅持使用自制軟件。在繼續操做以前您須要在Mac上安裝和配置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

JVM虛擬內存和垃圾回收

  • 告訴JVM使用64位數據模型(若是有)(-d64)。
  • 使用-XmsXmx標誌設置最小和最大堆大小。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>

HTTP代理

迄今爲止,最大的問題和挫折源是公司代理。使用-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.warHomebrew安裝到的參數/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盒更快。

相關文章
相關標籤/搜索