Jenkins のリリースフローで手動ビルドのリリースを禁止したいときは通常Jenkinsユーザーの権限を制限することで実現するかと思います。 さらに念を入れて手動ビルド自体を禁止する方法を説明します。


手動ビルドを禁止するJenkinsfile

whentriggeredBy を使えば、そのビルドのトリガーが手動(ユーザー)なのかポーリングなのか判定できます。 そこで errorfalse で止めてしまえばよいです。

下記の例は、人が手動でビルドボタンを押したときにビルドを中断させる例です。これで手動ビルドする不届き者を排除できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
stage ('トリガーチェック') {
    when {
        triggeredBy cause: "UserIdCause"
    }
    steps {
        script {
            echo "Do not execute build triggers manually."
            currentBuild.result = 'NOT_BUILT'
            sh 'false' // 明示的にビルドを失敗させる
        }
    }
}

その他のビルドトリガの判定

ちなみに、Gitなどのポーリングの場合は下記で捕まえられます。

1
2
3
4
5
6
7
8
9
stage ('トリガーチェック') {
    // こっちはSCMポーリングの場合.
    when {
        triggeredBy 'SCMTrigger'
    }
    steps {
        echo "Running because triggered by a SCM Trigger"
    }
}

他には下記のトリガがあるそうです。最後のものは特定のユーザが手動ビルドしたときですね。この例ではvlindeさん。

when { triggeredBy 'TimerTrigger' } when { triggeredBy 'BuildUpstreamCause' } when { triggeredBy cause: "UserIdCause", detail: "vlinde" }

公式サイトのPipeline - whenに詳細な説明があります。 もっと複雑な処理をしたい場合は参照してください。

まとめ

Jenkinsにて手動ビルドされたときにビルドジョブを中断する方法を書きました。 ユーザー権限で制限するのが普通ですが、さらにJenkinsfileでも禁止しておけば安心ですね。