天天看點

在MacOSX機器上設定JenkinsCI伺服器

在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/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技術課程為主。

在MacOSX機器上設定JenkinsCI伺服器

繼續閱讀