
在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/LaunchAgentsThen 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.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盒更快。
曆史文章
- GitLabCI實踐專輯
- Jenkins流水線實踐專輯
- ChatOps微實踐
關于作者
澤陽,DevOps領域實踐者。專注于企業級DevOps運維開發技術實踐分享,主要以新Linux運維技術、DevOps技術課程為主。