天天看點

在MacOSX機器上設定JenkinsCI伺服器安裝配置完整配置提示

在Mac OS X機器上設定Jenkins CI伺服器的指南。您希望在公司中擁有“移動持續內建”,而CI伺服器的最終選擇是Jenkins。如果您的公司規模很大,并且您很幸運,那麼Dev Support或Dev Ops團隊将為您完成所有繁重的工作并為您安裝。但是,如果不是這種情況,您可能進入了一個可以幫助您的頁面。

安裝

首先,請避免安裝Jenkins作為啟動守護程式。

Jenkins Wiki提供了用于Jenkins安裝的選項清單,但沒有提及Mac OSX。盡管它提到了Docker,但我隻聽說過有關Docker的好消息。在本文中,我将堅持使用自制軟體。在繼續操作之前您需要在Mac上安裝和配置JDK 。

要安裝,請運作一個簡單的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檔案。

brew pin jenkins           

現在,您還可以手動控制Jenkins的安裝,并且可以從指令行啟動/停止它。

# 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檔案。這是您需要的并且可能要更改的。

JVM虛拟記憶體和垃圾回收

  • 告訴JVM使用64位資料模型(如果有)(

    -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>           

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.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>           

提示

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           

繼續閱讀