Jenkins 2 的管道是一等公民。然而,在示例中,任务似乎作为单个序列执行:
node {
// Mark the code checkout 'stage'....
stage 'Checkout'
// Get some code from a GitHub repository
git url: '[email protected]:elifesciences/elife-bot.git'
// Mark the code build 'stage'....
stage 'Build'
echo "Unit tests will run here"
stage "Production"
echo "Deploying to production environment"
}
对于部署到生产系统,通常需要手动批准;有没有办法在管道内插入一个手动按钮来按下?
我一直在寻找可能的步骤来实现这一点文档,但无济于事。
答案1
输入是您正在寻找的选项。这是我使用它的方式。将步骤放在节点之外很重要,否则詹金斯将保留一个代理等待下一步。请记住,第二个节点可能不使用与第一个相同的工作区。
node {
stage('build'){
echo "building"
}
}
stage('Deploy approval'){
input "Deploy to prod?"
}
node {
stage('deploy to prod'){
echo "deploying"
}
}
答案2
我按照如下所示的方式阅读了此文档https://jenkins.io/doc/book/pipeline/syntax/
pipeline {
environment {
BRANCH_NAME = "${env.BRANCH_NAME}"
}
agent any
stages{
stage('Build-Initiator-Info'){
steps{
sh 'echo "Send Info"'
}
}
stage('Build') {
steps{
catchError {
sh 'echo "This is build"'
}
}
post {
success {
echo 'Compile Stage Successful . . .'
}
failure {
echo 'Compile stage failed'
error('Stopping early…')
}
}
}
stage ('Deploy To Prod'){
input{
message "Do you want to proceed for production deployment?"
}
steps {
sh 'echo "Deploy into Prod"'
}
}
}
}
答案3
此外,您还可以添加自动超时,如下所示
stage('build') {
steps {
sh """
# Some commands
"""
script {
timeout(time: 10, unit: 'MINUTES') {
input(id: "Deploy Gate", message: "Deploy ${params.project_name}?", ok: 'Deploy')
}
}
}
}
stage('deploy') {
when {
branch 'master'
}
steps {
sh """
# some commands
"""
}
}
如果您查找它,如果您只希望允许特定的个人能够回答,您还可以将 jenkins 输入绑定到访问 Jenkins 的用户的凭据 - 这也是由您的 Git 控制也足够的事实支撑的。
答案4
这只是一个简单的例子,但您可以根据需要触发它。
stage{
script{
input "Continue?"
...enter code here
...
}
}