簡體   English   中英

如何基於在SVN存儲庫上更新的特定文件來觸發Jenkins作業的構建?

[英]How to trigger a build on a Jenkins job based on specific files being updated on a SVN repo?

總的來說,我對詹金斯(Jenkins)和CI還是陌生的。

我們當前的SVN設置是由一個大型存儲庫構成的,該存儲庫包含按子目錄組織的各種項目,只要每個項目的特定文件提交給子目錄,我們都希望自動開始構建(並在將來進行測試)。 SVN回購。

我目前在詹金斯(Jenkins)的工作設置/工作流程就是這樣。

  • 一個主工作,每分鍾輪詢SVN並更新本地源副本
  • N個作業(每個項目一個),每分鍾使用FSTrigger插件輪詢本地源副本,以查看特定文件中的更改(每個項目顯然不同),如果發現更改,則觸發特定項目的構建

這一切都可以正常工作,但是從向SVN提交內容到Jenkins更新其本地副本的時間大約有一分鍾,還有一分鍾的時間使FSTrigger插件掃描“觸發文件”中的更改。

我剛剛在SVN中實現了提交后鈎子來解決第一個延遲,因此現在不再進行對SVN存儲庫的輪詢。

現在,我真的想擺脫由於FSTrigger插件每分鍾輪詢而造成的第二個延遲(輪詢是,順便說一句,無論如何都是一種糟糕的技術)。

給定我的觸發條件是針對我的每個項目將一個特定文件提交(更新)到SVN存儲庫,是否有一種方法可以使第一個作業基於剛剛更新的文件“調用/觸發”其他作業?

您想與FSTrigger插件分手。 正如您提到的,輪詢很差。

您想在提交后掛鈎中添加一些邏輯,以查看該提交中更改的路徑並觸發啟動適當構建的請求。

我不再使用jenkins或svn,所以我無法真正測試。 就像是:

svnlook changed -t "$TXN" "$REPOS應該讓您更改路徑。

然后向jenkins發出請求,以根據您在svnlook輸出中找到的路徑構建作業:

curl --user $JENKINS_USER:$JENKINS_API_TOKEN http://jenkins/job/build-name/build


OP中的注釋:這是我在提交后的鈎子中實現它的方式:

REPOS="$1"
REV="$2"
svnlook changed --revision $REV $REPOS |
  #logic to filter the trigger file and to create the job name from it |
  while read -r JOBNAME ; do
    /usr/bin/wget \
      --output-document "-" \
      --timeout=30 \
      --tries=1 \
      http://JENKINS_SERVER/job/$JOBNAME/build
done

效果很好!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM