1. Jenkins Pipeline语法

1.1. 整体结构

下面是一个Pipeline的案例,一个Pipeline必须包含的agent和stages的定义。

pipeline {
    agent { docker 'maven:3.3.3' }
    stages {
        stage('build') {
            steps {
                sh 'mvn --version'
            }
        }
    }
}

1.2. 定义执行环境

如果需要使用Docker来运行执行器,需要配置权限,默认YUM安装的Jenkins使用的是Jenkins用户启动,没有读取调用Docker的权限,需要添加权限

[root@dev ~]# usermod -a -G docker jenkins
[root@dev ~]# systemctl restart jenkins

1.3. 使用环境变量

environment {
        DISABLE_AUTH = 'true'
        DB_ENGINE    = 'sqlite'
    }

1.4. 增加阶段

注意:阶段(stage)里面不要为空,至少要一个步骤(step)

stage('阶段2') {
      steps {
        sh 'echo hello CODING'
      }
    }
    stage('阶段3') {
      steps {
        sh 'echo hello CODING'
      }

1.5. 增加步骤

1.5.1. 命令执行

  1. 打印消息:
echo 'Hello DevOps'
  1. 执行Shell脚本:
sh 'echo "Hello DevOps"'
  1. 执行Bat脚本:
bat 'Hello Windows Bat'
  1. 执行Pipeline脚本:
script {
    sh 'echo script'
}
  1. 变更目录
dir(path: './src')
  1. 设置休眠时间

单位:

  • 秒: SECONDS
  • 分: MINUTES
  • 时: HOURS
  • 天: DAYS
  • 纳秒: NANOSECONDS
  • 微妙: MICROSECONDS
  • 毫秒: MILLISECONDS
sleep(time: 5, unit: 'MINUTES')
  1. 错误信号
error '错误信号:这是一个自定义的错误信息'

1.5.2. 流程控制

  1. 重试步骤

如果一个步骤经常性执行失败,可以增加重试控制,count为重试的次数。

retry(count: 3) {
          echo 'Hello DevOps'
        }
  1. 超时控制

如果要限制一个步骤的执行时间,可以增加超时控制,超时会强制终止。

timeout(time: 60, activity: true) {
    echo 'Hello DevOps'
}
  1. 重试+超时控制

流程控制语句可以自由组合。例如我们想要重试部署任务 5 次,但是总共花费的时间不能超过 3 分钟。

steps {
                timeout(time: 3, unit: 'MINUTES') {
                    retry(5) {
                        sh './flakey-deploy.sh'
                    }
                }
            }

1.5.3. 完成时控制

post {
        always {
            echo 'This will always run'
        }
        success {
            echo 'This will run only if successful'
        }
        failure {
            echo 'This will run only if failed'
        }
        unstable {
            echo 'This will run only if the run was marked as unstable'
        }
        changed {
            echo 'This will run only if the state of the Pipeline has changed'
            echo 'For example, if the Pipeline was previously failing but is now successful'
        }
    }
Copyright © 赵班长@新运维社区 2019 all right reserved,powered by Gitbook该文件修订时间: 2020-04-30 12:29:51

results matching ""

    No results matching ""