1. 5. Jenkins使用 -- jobs
文章已經遷移到我的 個人博客 ,裡面還有更多內容。
前幾次我們一直在說項目(project),現在又出現一個job,他們分別是什麼呢?根據 這個討論 ,這兩個基本上是一個東西,名字基本可以互通,以下不再區分。
進入主頁,點擊 新建
然後出現下圖界面, Enter an item name 中輸入 DevProject1 ,然後選擇 構建一個自由風格的軟體項目 ,最後點擊 OK 保存。
這樣,我們在主頁就可以看到這個項目了
滑鼠懸浮在項目名稱上,出現一個倒三角,點擊出現下拉菜單,選擇 配置 ,進入項目配置頁面。 項目名稱 沒什麼好說的,就是項目名稱而已。 描述 和上一部分 基本設置 中的內容一樣。 源碼管理 可以選擇自己使用的管理方法,下一部分我們會講使用git和github。其他構建方便的東西,實際操作的時候再說,現在自己熟悉下即可。
不過這里簡單說下 構建觸發器 的 Build periodically 中 日程表 這個部分,其實大家自己點開幫助按鈕就可以得到足夠的信息。
下面相關很多部分很多取自 linux計劃任務crontab使用方法 ,並做相應調整和修改。
其他格式解釋:
快速幫助文檔有幾個例子,不明白的話可以看看,很簡單。
我們這里先熟悉下Jenkins的導航,首先應該注意,頭部有導航標識(這個應該叫啥啊,我不知道,自己取得名字,請大家能夠提供學名,謝謝),如下圖所示
如果我點擊一個項目名稱,比如 DevProject1
進入這個項目的頁面,如下,注意紅框中的變化
滑鼠懸浮會有各種下拉菜單,自己可以體驗。
進入Jenkins主頁,如果有項目的話,會如下圖顯示
注意紅框 S 和 W 對應的標識,滑鼠懸浮提示分別為「上次構建狀態"和」編譯晴雨表「。
S 好理解吧,那 W 是什麼呢?我們通過實驗來看。
點擊進入一個項目,或者通過下拉菜單,點擊 立即構建 (第一次),出現下圖變化
S 變藍色,滑鼠懸浮提示 success , W 太陽位置,懸浮提示如下圖
這次模擬一次構建失敗。進入項目配置,找到 構建 ,因為我用的Mac,所以選擇」Execute shell「,如果是win用戶,請選擇第一個選項。
Command 框中,輸入不是mac也不是win命令的一串無意義字元,比如「asdf",保存設置,然後點擊 立即構建 (第二次),觀察項目主頁圖標變化。
然後我再點擊一次 立即構建 (第三次),繼續觀察項目主頁圖標變化。
然後刪除剛才的那個無意義的命令,再次構建(第四次)。然後再次構建(第五次)。項目主頁如下顯示, S 為藍色, W 顯示烏雲。滑鼠懸浮,觀察提示。
有沒有看出, S 就是簡單的本次構建成功與否, W 是近五次構建情況總覽,按照成功與失敗比例,對應晴天到雷雨。
進入我們的項目主頁,左下側還能看到構建歷史(這里我有多做了幾次錯誤構建,不要在意這些多出來的構建)
點擊某個記錄,今日此構建的主頁
左側各種查看和設置選項,自己可以試試。比如點擊 Console Output ,可見:
顯示控制台輸出,並有我們失敗的提示。
進入某個項目的設置,勾選 觸發遠程構建 ,在 身份驗證令牌 中填入一個字元串,比如「111」
根據下方提示,瀏覽器輸入「JENKINS_URL/job/TestProject1/build?token=TOKEN_NAME 」啟動構建。
「JENKINS_URL」是構建主機的地址。在這里,我們並沒有遠程主機連接,不過我們可以用本機實驗,那麼「JENKINS_URL」就是「http://0.0.0.0:8080/」。
「TOKEN_NAME」就是我們剛才設置的字元串(「111」)。
瀏覽器地址欄輸入:「 http://0.0.0.0:8080/job/TestProject1/build?token=111 」,會有提示應該使用post,不要用get。不管他,點擊 Proceed 繼續。回到項目主頁,可見已有構建。
因為使用get不安全,所以建議使用post遠程構建,具體方法可以參考這里 Jenkins API Integration : Trigger Job Remotely via Jenkins API
為了演示,快速建立三個項目如圖:
進入「2」的配置,找到 構建觸發器 ,勾選 Build after other projects are built , Projects to watch 填入「1」。注意下面三個單選框,這里使用默認設置。
然後在 構建後操作 的操作中,選擇 Build other projects
要構建的項目 輸入「3」。
保存回到「2」項目主頁後,發現如下圖變化
查看其他兩個項目,同樣出現對應的上下級項目。
2. jenkins 實現參數聯動構建
日常編寫pipeline的時候,有時候會遇到針對參數作出處理(聯動,校驗值格式等)。一開始想到的是能不能針對build按鈕作出改變,比如我在提交的時候校驗下參數是否填寫,是否符合要求。但是那樣就需要修改jenkins源碼,針對build按鈕作邏輯判斷。考慮到這不是簡單的功能,而且有可能會破壞原有的設計,並且沒有大量的測試覆蓋的話,出現幺蛾子的概率很大。所以最終還是放棄了。還有位同學提出job開始做出判斷,但是這種不好的地方在於用戶在觸發job後,必須到log中才能看到失敗的原因,而且這種做法比較被動,易產生大量的error記錄,不友好。
思考再三,加上看到jenkins官網上有個屬性是
決定嘗試一下。這個屬性的作用是可以根據依賴控制項選擇的值,返還本控制項用戶期望的值。比如下圖的功能:branch有兩個選擇:master和pr,當用戶選擇master的時候,默認編譯artfact。當用戶選擇branch 為pr的時候,需要用戶提供pr的artifact version,並且把build artifact的按鈕灰掉,不讓用戶觸發。限制用戶行為,避免流程出錯。
有兩種做法:
以pr_artifact_version 配置為例。
1.通過jenkins頁面配置。
referenced parameters一定要寫,表明根據那個參數變化而變化。
2.pipeline 腳本的方式。
以在pipeline properties--parameters屬性中加上下面的參數聲明,jenkinsUtil是我自己抽出來的util類,其中的生成動態依賴方法如下圖:
需要傳入的參數有本身控制項的name,依賴的控制項的name(reference),本身控制項的type,次此處我用的是"ET_FORMATTED_HTML",因為我需要在頁面上畫出文本框,然後是本身控制項的描述,最後是執行的groovy 腳本:如果branch為pr,那麼返回一個不能改變的選擇框,提示用戶不需要關心(也可以把它隱藏,type選"ET_FORMATTED_HIDDEN_HTML"),如果是master,則就返回checkbox,默認勾選,讓用戶自己選擇是build,還是不需要build。
綜上,通過這種方式能達到原先得需求,但是本身使用起來還是有點瑕疵的,比如它的提示和容錯能力還是存在問題的(需要將不同flow的參數都要列舉在頁面,容易迷惑用戶)。好的做法應該是把用戶不關心的東西隱藏,易錯的地方(甚至錯誤發生了)有足夠的提示,並提示用戶進一步的修正。
3. 自動化部署工具jenkins,從此擺脫重復單調的工作
它是基於java開發的一種持續集成工具,用於監控持續重復的工作,旨在提供一個開放易用的軟體平台,使軟體的持續集成變成可能。
有了它你可以免除手工編譯,發布代碼,上線更容易。節省的時間你可以喝杯咖啡,放鬆一下 ^_^
道路千萬條,熟悉第一條,我這里使用 Red Hat 家族衍生的 centos 上安裝Jenkins。
這里可以下載rpm包: http://pkg.jenkins-ci.org/redhat/
也可以如下操作:
安裝
將Jenkins存儲庫添加到yum repos,並從此處安裝Jenkins。
安裝穩定版
還有一個LTS YUM資源庫的LTS版本線
安裝Java
Jenkins需要Java才能運行,但默認情況下某些發行版不包含此內容。要安裝Open Java Development Kit(OpenJDK),請運行以下命令:
安裝完成後Jenkins 啟動之前的注意事項
默認情況是Jenkins是使用Jenkins用戶啟動的,但這個用戶目前系統並沒有賦予許可權,這里我們將啟動用戶修改為root;另外Jenkins默認埠是8080,這個跟tomcat的默認埠沖突,我們也修改一下默認埠。
找到 JENKINS_USER 和JENKINS_PORT ,修改為root和你需要的埠
啟動/停止
注意:如果收到以下錯誤消息,請確保已安裝Java:
Starting jenkins (via systemctl): Job for jenkins.service failed. See 'systemctl status jenkins.service' and 'journalctl -xn' for details.[FAILED]
禁用防火牆
有關CentOS Java的重要說明
Jenkins需要Java才能運行,但yum install jenkins不強制已經安裝了java。檢查以確保您已通過運行安裝了hava java java -version。為了進一步使CentOS用戶感到困難,默認的CentOS版本的Java與Jenkins不兼容。Jenkins通常最適合使用Java的Sun實現,由於許可原因,它不包含在CentOS中。
如果您獲得類似於以下內容的輸出,則表示您使用的是Java的默認(GCJ)版本,該版本不適用於Jenkins:
要解決此問題,您可能需要刪除GC的GCJ版本並安裝Sun兼容版本。
如果收到上面的輸出,請卸載默認的java:
然後在卸載Java之後(或者如果你根本沒有安裝Java那麼開始)。您需要安裝與Sun兼容的Java版本。最簡單的方法是使用OpenJDK,它可以通過EPEL存儲庫獲得(或者您可以直接從Oracle安裝官方 RPM)。要安裝OpenJDK,請運行以下命令:
根據您的CentOS版本,OpenJDK的軟體包名稱可能有所不同。使用yum search openjdk來檢查包的名稱。如果通過yum找不到OpenJDK,則可能需要安裝EPEL yum存儲庫。安裝後,您應該能夠獲得以下java -version輸出:
Ok,到此jenkins安裝完成。
接下來你可以在瀏覽器地址中輸入Jenkins網址,如:IP:埠,將顯示如下內容:
拷貝指定文件密碼,進入用戶自定義插件界面,建議選擇安裝官方推薦插件:
接下來是進入插件安裝進度界面:
等待一段時間之後,插件安裝完成,配置用戶名密碼:
OK,你可以使用jenkins來編譯、發布你的代碼了。oh,它支持從代碼庫中直接拉取代碼,git、svn都支持。趕快使用你的Spring boot、go試試吧。
4. jenkins git怎麼自動編譯工程
當時也是花費了不少時間來配置Jenkins自動打包的問題,覺得還是需要記錄一下。 1.安裝Jenkins,這個很簡單,不需要多說。 2.下載Git Plugin,Gradle Plugin,Android Emulator Plugin(這個可以配置SDK路徑,覺得這個插件挺好)
5. 使用jenkins和編譯伺服器
1 切換成root用戶
2 生成公鑰 這里注意會生成兩份密鑰 .pub為公 另一個為私
3 查看公鑰
4 把公鑰放入git
5 檢驗許可權
6 打開復制私鑰
7 進入Jenkins 添加憑據,類型 SSH Username with private key
在下方密鑰區域 粘貼 私鑰
8 在工程下面的密鑰區域選擇剛生成的
執行中如果出現許可權不足 或者路徑不對
1 路徑不對 可以查看本地路徑是否存在腳本 如果路徑配製成環境變數 前面需要加$ 如$SHELLPATH 直接輸入路徑則不需要加任何符號 如 /media/shell/**.sh
2 出現許可權錯誤 你需要讓jenkins使用root用戶操作如下 以下用ubuntu舉例
文件中
JENKINS_USER=$NAME
JENKINS_GROUP=$NAME
改稱
JENKINS_USER=root
JENKINS_GROUP=root
修改目錄許可權
cd /var/lib/chown -R root:root ./jenkins
重啟jenkins 不同版本重啟方式不同 自行網路
systemctl restart jenkins
編譯伺服器mount到jenkins本機 利用了NFS
更新系統軟體包
安裝NFSServer
清除目錄所有許可權限制
先打開 exports 裡面定義了NFS伺服器訪問許可權
設置訪問許可權
/mnt/nfs_share 是共享目錄路徑
rw 設置可以讀寫
sync 需要先將更改寫入磁碟 然後才能應用更改
no_root_squash / no_subtree_check 消除子樹檢查
1) 全子網可訪問
2) 單獨網路可訪問
中間ip換成本機ip 如192.168.0.1
打開 然後查看狀態
在Ubuntu和Debian上安裝NFS客戶端:
在CentOS和Fedora上安裝NFS客戶端:
ip改成本機IP即可
或者直接修改配置文件
1) 在NFS伺服器的共享文件夾中創建個文件
2) 在NFS客戶端中查看文件是否存在
ip換成本機ip
查看路徑是否正確即可
把缺少的依賴庫先編譯一遍
6. jenkins git+maven 編譯怎麼知道編譯成功
1.通過Jenkins web頁面添加Git plugin
Manage Jenkins->Manage Plugins->Available中選擇Git Plugin安裝,
注意要填寫user name和 email地址,否則日後會碰到git tag的錯誤
2.在Jenkins使用的機器上創建Git用戶所需要的公鑰
具體步驟參考前面Git server文章
但是注意,要將最後生成的.ssh目錄下的公鑰和私鑰文件復制到/var/lib/jenkins/.ssh目錄下,否則git clone命令會報錯
3.修改jenkins目錄許可權
chmod -R 777 /var/lib/jenkins
4.現在可以通過web頁面創建一個項目Test,然後設置該項目使用Git作為版本管理。
並且設置repository路徑,比如我的:git@S1:cml.git
5.在build選項的pom文件指定你需要執行的pom.xml路徑
比如我的一個測試工程名叫client,是個maven工程,我設置為client/pom.xml
6.現在可以點擊左側的Build now進行測試
一切OK,則沒有錯誤日誌。在Build History中可以看到測試結果,有沒有錯誤。
7.Email發送設置
在Manage Jenkins->Configure System->Email Notification中,設置SMTP發送的基本信息,點擊Advanced,可以填寫用戶名和密碼。還有一個測試按鈕可以用來發送測試設置是否正確。
同時在Test項目中的Building Settings打勾選中E-mail
Notification,點擊右邊的問號,會出現幫助文檔,說明在四種情況下會發送email,填寫接受email的地址,然後故意將client代碼
修改到不能編譯通過。然後點擊Build now按鈕測試一下。果然收到email.
8.檢查代碼更新並編譯
可以通過Poll SCM來設置定時檢查編譯功能
比如*/5 * * * * 就是每隔5分鍾檢查一次,如果git倉庫中有更新,則執行build操作。
9.使用Maven加快下載速度
如我這篇文章所述,用可以避免下載過慢問題,也可以繞過公司內部外網限制問題。
Jenkins的.m2目錄路徑在:/var/lib/jenkins/.m2/
首先清空裡面所有的jar包,然後創建settings.xml文件,並編輯內容如下:
源碼列印?
<settings>
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url></url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url></url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url></url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!--make the profile active all the time -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
現在點擊build now測試一下,打開console output,看看命令行輸出結果,如果發現從S1下載jar包,就正確。和不用的比較了一下,節省了1分多鍾.
7. 敏捷之路 C++ (一) jenkins配置-VS工程自動編譯基本配置
Windows安裝Jenkins主要有兩種方式
關於安裝這塊官方資料齊全就不浪費時間了。
接下來啟動 jenkins並按照默認設置一路下一步就行了。
成功啟動jenkins並檢查確認jenkins工作區無誤後就可以開始配置jenkins以及自動編譯VS項目的相關環境了。
建議: 所有需要安裝的工具例如git,python,svn等盡量不要安裝在Program Files中,自己重新指定一個沒有許可權問題,純英文無特殊符號及空格等的路徑。
接下來安裝插件
首先是使用vs項目必不可少的MSBuild插件
以及多源項目需要的Multiple SCMs plugin
如果你需要郵件通知則安裝Email Extension Plugin
建議安裝一個你的工程所需版本的Visual Studio
一方面MSBUILD可以直接用,另一方面如果自動編譯出問題 可以使用VS打開你的項目進行調試
通常一個相對比較大的多項目工程,如果不是一直嚴格按照標准配置,很難保證獲取工程可以成功編譯建議從以下幾個角度檢查
配置好了工程可以從遠端克隆一個新的直接編譯試一下。可以成功編譯就可以配置jenkins項目了。
添加賬號密碼時有時候第一次添加的會無效,那就再添加一次並選擇第二個。通常就可以了。
8. 請問Jenkins如何配置自動或定時編譯
打開job的配置界面,在構建觸發器欄下有Poll SCM(定時檢查源碼變更並構建)和Build periodically(周期進行項目構建,不關心源碼是否變更)選擇,打開它們後面的問號,有很明確的介紹和實例
9. jenkins怎麼編譯多個target
一直停留在這步
通過google,發現jenkins pull下來的代碼可能是找不到target,必須將target設置為shared。如下圖:將target的shared勾選上就可以了。
10. Java Maven打包總結(Jenkins多模塊編譯部署)
原文地址: Java Maven打包總結(Jenkins多模塊編譯部署)
依次執行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7個階段。
完成了項目編譯、單元測試、打包功能,但沒有把打好的可執行jar包(war包或其它形式的包)布署到本地maven倉庫和遠程maven私服倉庫
依次執行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8個階段。
完成了項目編譯、單元測試、打包功能,同時把打好的可執行jar包(war包或其它形式的包)布署到本地maven倉庫,但沒有布署到遠程maven私服倉庫
依次執行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9個階段。完成了項目編譯、單元測試、打包功能,同時把打好的可執行jar包(war包或其它形式的包)布署到本地maven倉庫和遠程maven私服倉庫
可以看到主要區別在把生成的jar包最終存放的位置, package只管打包; install把打好的包放到了本地maven倉庫;deploy是同時放到本地倉庫和遠程maven私服
這里本地倉庫默認是 /root/.m2/repository/ ,具體配置在 ${M2_HOME}/conf/settings 的 localRepository 配置項決定。遠程私服倉庫一般是nexus,具體地址在項目的pom.xml中配置。比如
一般是進入父級目錄之後執行
如果是多級目錄的話,有時候並不一定是按照 具體的項目來 編譯,比如
這個時候如果一個項目一個項目來編譯會超級多,很繁瑣,這里是按照 subparentproject 來編譯,命令如下
有個注意的地方:
subparentproject 目錄下的pom.xml文件中一定有類型如下的配置
1、需要安裝插件 Extended Choice Parameter Plug-In 可以支持參數單選、多選
2、項目選擇"自由風格",而不是maven編譯
3、在「構建」 -> "執行shell" 中編寫 子模塊編譯腳本及其後續處理
具體配置如下圖
「構建」 -> "執行shell" 中的處理腳本
附加:
Linux Bash下字元串操作總結