觸發構建有多種方式,今天主要記錄,遠程觸發構建和輪詢SCM。
一 遠程觸發構建
Build Triggers中的Trigger builds remotely即遠程觸發構建,選中后提示信息中會提示一個地址“JENKINS_URL/me/my-views/view/all/job/CITest/build?token=TOKEN_NAME”,其中的JENKINS_URL即jenkins的訪問地址,如http://127.0.0.1:8080/jenkins/,末尾token=TOKEN_NAME即設置的用戶令牌(請求中需要用到該值)。
文本框中輸入該用戶的API_TOKEN_NAME-自定義(token生成方法:在 people中點擊當前登陸用戶-確定該用戶可以執行目標job,點擊configure,API Token項,如果沒有,則點擊API Token生成)
如何觸發構建:如在shell中訪問該地址,可以借助網絡工具curl或者在瀏覽器中訪問:
如:GET http://127.0.0.1:8080/jenkins/job/CITest/build?token=jenkinstoken
掌握了此觸發機制,可以將該請求集成到其他系統中進行持續集成。
二 輪詢SCM,結合SVN實現提交后自動觸發job
Build Triggers中的輪詢SCM,需要配合svn的hook機制,在hook腳本中訪問該url,進行jenkins任務觸發。
結合svn的hook使用步驟:
1 在jenkins中下載jenkins-cli.jar包(http://jenkins_url:port/jenkins/jnlpJars/jenkins-cli.jar)-- 使用cli工具,需要打開相應設置,jenkins-->系統管理-->Configure Global Security-->勾選啟用安全->TCP port for JNLP agents選擇隨機端口或者指定端口均可以。
2 將jenkins-cli.jar放到svn服務器中,確保有執行權限
3 在svn對應倉庫的hooks目錄下找到對應的腳本,post-commit.tmpl,去掉.tmpl后綴,修改腳本內容,使用jenkins-cli.jar執行命令:
#!/bin/bash
source /etc/profile
java -jar /root/jenkins-cli.jar -s http://47.104.77.127:8080/jenkins/ -auth JENKINS_USERNAME:JENKINS_PASSWORD build JENKINS_JOB
4 保存后,在svn中提交代碼,查看是否觸發了jenkins任務
附:
svn的hook介紹:
svn的hook機制:hook即鈎子,用戶在管理數據倉庫的時候,當特定的事件發生時,相應的hook會被調用,hook 其實就相當於特定事件的處理函數。
當前 Subversion 提供了5種可以安裝的 hook :
事件名 |
時機 |
與hook交互 |
一般用途 |
start-commit |
事務創建之前。 |
傳給 hook 的 參數: - 參 數 1 , 代碼庫路徑。 - 參 數 2 , 試圖提交的用戶名。 hook 的返回值:非 0 則 終止。 |
判斷用戶是否有權限進行提交 操作。 |
pre-commit |
事務完成,但未提交。 |
- 參 數 1 , 代碼庫路徑。 - 參 數 2 , 事務名。 hook 的返回值:非 0 則 終止提交,操作回滾。 |
對提交內容進行檢查。如要求 提交必須填寫提交信息。 |
post-commit |
事務提交完畢,新的修訂版被 創建。 |
傳給 hook 的 參數: - 參 數 1 , 代碼庫路徑。 - 參 數 2 , 剛創建的修訂版號。 hook 的返回值被忽 略。 |
發送郵件通知,或備份代碼 庫。 |
pre-revprop-change |
修改修訂版屬性(如提交時提 供的信息 message )之前。 由於修訂版屬性一旦修改就會 永久的丟失,除非安裝這個事件的 hook, subversion 的 客戶端不允許遠程修改修訂版屬性。 |
傳給 hook 的 參數: - 參 數 1 , 代碼庫路徑。 - 參 數 2 , 要修改的修訂版號。 - 參 數 3 , 操作用戶名。 - 要 修改的屬性。 hook 的返回值:非 0 則 終止。 |
保存修訂版屬性的改變記錄。 |
post-revprop-change |
修訂版屬性值被修改之后。 如果沒有安裝 pre-revprop-change的 hook , 這個事件的 hook 不會被執行。 |
傳給 hook 的 參數: - 參 數 1 , 代碼庫路徑。 - 參 數 2 , 要修改的修訂版號。 - 參 數 3 , 操作用戶名。 - 要 修改的屬性。 hook 的返回值被忽 略。 |
發送郵件通知。 |
在當前倉庫下面的hook目錄,都會存在相應hook文件的模板,要讓相應hook文件起作用,就必須復制當前模板並去掉后面的.tmpl,然后編寫相應的邏輯。