2014-11-14 42 views
2

我有一個Jenkins作業,將工件部署到服務器。我希望讓工作運動員能夠在一定時間內停用工作 - 可能是一個小時,可能是一個月。我也希望他們不得不輸入一個理由。原因(連同各種其他信息 - 建立名稱,跑步者名稱等)然後需要通過電子郵件發送到通訊組列表。禁用Jenkins作業設置的時間量

是否有辦法在成功完成後從本身內部禁用作業一段時間?

我猜我需要參數化構建插件,我已經成功地使用了幾個工作。

編輯: 我想我可以做到這一點,通過檢查一個前置步驟中的鎖定文件,並編寫一個鎖定文件,其中包含或命名的時間構建成爲解鎖。我認爲可能有插件或我可以使用的東西。

+0

對不起,如果這是垃圾郵件,但[CloudBees跳過下一個構建](https://www.cloudbees.com/products/jenkins-enterprise/plugins/skip-next-build-plugin)插件做到這一點。提供訂閱。 – recampbell

+0

聽起來很有趣,但考慮到我可以以一種難看的方式免費做到這一點,我不會爲了方便而付錢。 – Will

回答

0

好的,所以我最後用我的方法去了。使用參數化版本(使用參數化版本插件),我請建築師輸入他們希望作業被鎖定的日期,直到。然後將其作爲後構建步驟寫入.lock文件。隨後,作爲預構建步驟,我查找一個.lock文件並閱讀其中的內容。然後,我將文件中的日期與當前日期進行比較,如果作業被鎖定,或者繼續執行,則構建失敗。

代碼如下。

前階段:

#!/bin/bash 
echo '' 
EXIT_CODE=0 
LOCK_FILE_NAME=$DEPLOYMENT_ENV'.lock' 

#Check chosen branch isn't master 
if [ $BRANCH_NAME = 'master' ] 
then 
     echo 'This job is for building feature branches. To build master, use the Deploy Master Artifact To Staging job.' 
     EXIT_CODE=666; 
else 
#Check if lock file exists for selected environment 
if [ -f $LOCK_FILE_NAME ] 
then 
    echo 'Lock file found for' $DEPLOYMENT_ENV 
    FILE_CONTENTS=`head -n 1 $LOCK_FILE_NAME` 
    LOCK_DATE=`date -d $FILE_CONTENTS +'%Y%m%d'` 
    NOW=`date +'%Y%m%d'` 
    #Compare lock date to today. Has the lock expired? 
    if [ $NOW -gt $LOCK_DATE ] 
    then 
     echo $DEPLOYMENT_ENV 'no longer locked. Proceeding with deployment...' 
    else 
     echo 'Job locked until:' `date -d $LOCK_DATE +'%d-%m-%Y'` 
     echo 'Aborting job...' 
     EXIT_CODE=666 
    fi 
else 
    echo 'No lock file present for' $DEPLOYMENT_ENV 
    echo 'Proceeding with deployment...' 
fi 
echo '' 
exit $EXIT_CODE 

後步驟:

#!/bin/bash 
echo '**********' $WORKSPACE 
#Copy artifact to web server 
#Start web server 
#Set lock 
echo 'Now lock the environment until:' $LOCK_UNTIL; 
echo $LOCK_UNTIL > $WORKSPACE'/'$DEPLOYMENT_ENV'.lock' 

腳本是不是我的強項,因此,如果任何人有任何更好的建議,我會很高興聽到他們的聲音: )

相關問題