在设定的时间内禁用Jenkins作业

时间:2014-11-14 04:39:18

标签: jenkins

我有一个Jenkins作业,它将工件部署到服务器。我想让工作跑步者能够在一段时间内禁用工作 - 可能是一个小时,可能是一个月。我也希望他们必须输入一个理由。原因(连同各种其他信息 - 构建名称,运行名称等)然后需要通过电子邮件发送到分发列表。

是否有办法在成功完成后从内部禁用作业一段时间?

我猜我需要参数化的构建插件,我已经成功使用了这个插件。

编辑: 我想我可以通过在预先步骤中检查锁文件,并在构建解锁的时间内写入包含或命名的锁文件来执行此操作。我想可能会有一个插件或者我可以使用的东西。

1 个答案:

答案 0 :(得分:0)

好的,所以我最终选择了我的方法。使用参数化构建(使用Parameterised Build Plugin),我要求构建器输入他们希望锁定作业的日期,直到。然后将其作为构建后步骤写入.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'

脚本编写并不是我的强项,所以如果有人有任何更好的建议,我会很高兴听到他们:)