Jenkinsfile基本练习

    技术2025-01-21  34

    label:选择特定标签的Jenkins节点作为构建环境。

    pipeline { agent { label 'my-defined-label' } }

    node:node用法与label用法一样,但是node有额外的可选参数customWorkspace,可以指定工作空间。

    pipeline { agent { node { label 'my-defined-label' customWorkspace '/some/other/path' } } }

    post

    post 部分定义一个或多个steps ,post里面的steps将根据流水线或阶段的返回结果来判断是否执行。 参数:

    always:无论流水线或阶段的返回结果如何,都将执行该steps。 changed:只有当前流水线或阶段的完成状态与它之前的运行不同时,才执行该steps。 failure:只有当前流水线或阶段的返回值为非0时,才执行该steps。 success:只有当前流水线或阶段的返回值为0时,才执行该steps。 unstable:只有当前流水线或阶段的状态为"unstable",才允许在 post 部分运行该步骤, 通常由于测试失败,代码违规等造成。 aborted:只有当前流水线或阶段的状态为"aborted",才执行该steps,aborted通常为手动取消构建时的状态。

    pipeline { agent any stages { stage('Example') { steps { echo 'Hello World' } } } post { always { echo 'I will always say Hello again!' } } }

    environment 以键值对的方式添加环境变量,可以是添加全局环境变量,也可以是在某个stage中添加环境变量,stage中添加的环境变量只作用于当前stage。

    pipeline { agent any environment { CC = 'clang' } stages { stage('Example') { environment { AN_ACCESS_KEY = credentials('my-prefined-secret-text') } steps { sh 'printenv' } } } }

    options

    options配置流水线的构建配置,类似于自由构建的丢弃旧的构建,是否允许并行构建等等。也可以由插件提供参数,比如timestamps(在控制台输出时间) buildDiscarder:保留最近的构建次数。 options { buildDiscarder(logRotator(numToKeepStr: '1')) } disableConcurrentBuilds:不允许同时执行流水线,可被用来防止同时访问共享资源等. options { disableConcurrentBuilds() } skipDefaultCheckout:跳过在版本控制器中检出代码。 options { skipDefaultCheckout() } skipStagesAfterUnstable:当构建状态为UNSTABLE时,跳过该阶段。 options { skipStagesAfterUnstable() } checkoutToSubdirectory:在工作空间的子目录中自动执行源代码控制检出。 options { checkoutToSubdirectory('foo') } timeout:设置流水线运行的超时时间, 若在此时间内任务未执行完,则自行停止构建。 options { timeout(time: 1, unit: 'HOURS') } retry:在失败时, 重新尝试整个流水线的指定次数。 options { retry(3) } timestamps:在控制台输出时间戳。 options { timestamps() } 个别任务可以单独指定更长的超时时间如下3分钟拉取代码超时 git 'https://gitee.com/oftware/api.git' timeout ("${env.TIMEOUT?:3}") pipeline { agent any options { timeout(time: 1, unit: 'HOURS') buildDiscarder(logRotator(numToKeepStr: '1')) } stages { stage('Example') { steps { echo 'Hello World' } } } }

    参数 parameters 指令提供了一个用户在触发流水线时应该提供的参数列表。这些用户指定参数的值可通过 params 对象提供给流水线步骤。

    string:字符串类型的参数。 parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') } booleanParam:布尔参数 parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') } pipeline { agent any parameters { string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?') } stages { stage('Example') { steps { echo "Hello ${params.PERSON}" } } } }

    触发器 triggers 指令定义了流水线被重新触发的自动化方法。对于集成了源( 比如 GitHub 或 BitBucket)的流水线, 可能不需要 triggers ,因为基于 web 的集成很肯能已经存在。 当前可用的触发器是 cron, pollSCM 和 upstream。

    cron:接收 cron 样式的字符串来定义要重新触发流水线的常规间隔。 triggers { cron('H */4 * * 1-5') } pollSCM:接收 cron 样式的字符串来定义一个固定的间隔,在这个间隔中,Jenkins 会检查新的源代码更新。如果存在更改, 流水线就会被重新触发。 triggers { pollSCM('H */4 * * 1-5') } upstream:接受逗号分隔的工作字符串和阈值。 当字符串中的任何作业以最小阈值结束时,流水线被重新触发。 triggers { upstream(upstreamProjects: 'job1,job2', threshold: hudson.model.Result.SUCCESS) } pipeline { agent any triggers { cron('H */4 * * 1-5') } stages { stage('Example') { steps { echo 'Hello World' } } } }

    工具 定义使用工具的名称,该工具需在系统设置中进行设置。当前支持maven、jdk、gradle

    pipeline { agent any tools { maven 'apache-maven-3.0.1' } stages { stage('Example') { steps { sh 'mvn --version' } } } }

    script script块,script块使用groovy语法,提供更加了灵活的用法。

    pipeline { agent any stages { stage('Example') { steps { echo 'Hello World' script { def browsers = ['chrome', 'firefox'] for (int i = 0; i < browsers.size(); ++i) { echo "Testing the ${browsers[i]} browser" } } } } } }

    参考链接

    https://www.jenkins.io/zh/doc/book/pipeline/syntax/
    Processed: 0.018, SQL: 9