[jenkins]-jenkins流水线根据是否是定时触发执行部分stage

导语:jenkins 流水线有个.git比较大的job,还在测试阶段,经常1个多月不部署,导致job里下载的git等被清理。重新下200G 又要一天。打算用定时任务去每周触发一次构建,并且跳过部署阶段。

在 Jenkins 的 pipeline 中,您可以使用 cron 表达式来设置定期构建任务。要在 pipeline 中实现这个功能,您需要在 pipeline 脚本中添加 triggers 属性,并配置 cron 表达式来定时触发构建操作。

以下是一个示例 pipeline 脚本,用于每周一次构建并只执行部分模块:

pipeline {
    agent any
    triggers {
        cron('0 0 * * 1') // 每周一凌晨触发构建操作
    }
    stages {
        stage('拉取代码') {
            steps {
                git url: 'git@github.com:myorg/myrepo.git'
            }
        }
        stage('构建模块A') {
            when {
                changeset "path/to/moduleA/**"
            }
            steps {
                sh 'mvn clean install -f path/to/moduleA/pom.xml'
            }
        }
        stage('构建模块B') {
            when {
                changeset "path/to/moduleB/**"
            }
            steps {
                sh 'mvn clean install -f path/to/moduleB/pom.xml'
            }
        }
        // 其他阶段...
    }
}

在这个示例脚本中,我们使用 triggers 属性来设置 cron 表达式,以在每周一次构建操作。我们还使用 when 语句来限制只有指定的模块或路径中的代码更改时才执行对应的构建操作。

希望这个示例能够帮助您实现 pipeline 定期构建的需求。

可以针对每个 Stage 进行定时构建。只需在您想要定时触发的 Stage 中添加 triggers 属性并配置 cron 表达式即可。

以下是一个示例 pipeline 脚本,其中包含两个 Stage,您可以在其中针对其中一个 Stage 进行定期构建:

pipeline {
    agent any
    stages {
        stage('拉取代码') {
            steps {
                git url: 'git@github.com:myorg/myrepo.git'
            }
        }
        stage('构建模块A') {
            triggers {
                cron('0 0 * * 1') // 每周一次触发构建操作
            }
            steps {
                sh 'mvn clean install -f path/to/moduleA/pom.xml'
            }
        }
        stage('构建模块B') {
            steps {
                sh 'mvn clean install -f path/to/moduleB/pom.xml'
            }
        }
        // 其他阶段...
    }
}

在这个示例脚本中,我们使用了 triggers 属性来为 构建模块A 这个 Stage 配置定时构建,即每周一次。其他 Stage 并没有配置构建触发器,所以不会受到定时构建的影响。

希望这个示例能够帮助您实现针对 Stage 的定时构建需求。

通过判断构建用户来确认是否是自动触发的

pipeline {
    agent {
        label "ssd"
    }
        triggers {
    // cron('0 0 * * 1') // 每周一次触发构建操作
    cron('*/2 * * * *') // 每周一次触发构建操作
    }
    

    stages {
        stage('确认发布') {
            environment {
                CAUSE = "${currentBuild.getBuildCauses()[0].shortDescription}"
            }
            steps {
                echo "Build caused by ${env.CAUSE}"
                script{
                    echo "${env.CAUSE}"
                    if ( "${env.CAUSE}" == "Started by timer" ){
                        echo "1"
                    } else{
                        echo "2"
                    }
                }
            }   
        }
}
}

其他写法

pipeline {
    agent {
        label "ssd"
    }
        triggers {
    cron('0 0 * * 1') // 每周一次触发构建操作
    // cron('* * * * *') // 每周一次触发构建操作
    }
    
    environment {
        CAUSE = "${currentBuild.getBuildCauses()[0].shortDescription}"
    }
    
    stages {
        stage('Example') {
            when {
                expression { return env.CAUSE == 'Started by timer' }
                expression { "1" == "1" }
            }

            steps {
                sh "echo 'This is an example triggered by timer'"
            }
        }
    }
}

参考
https://blog.csdn.net/tiny_du/article/details/120739270

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个 GitLab 触发 Jenkins 执行流水线并将流水线结果反馈给 GitLab 的示例: 1. 创建 Jenkins Job 首先,需要在 Jenkins 中创建一个 Job,用于执行 GitLab 合并请求触发流水线。这个 Job 的主要作用是拉取代码,执行构建操作,生成流水线报告,并将报告发送给 GitLab。具体而言,这个 Job 需要完成以下几个步骤: - 拉取代码:从 GitLab 上指定的分支中拉取代码。 - 执行构建操作:根据项目的具体需求,执行编译、测试、打包、部署等操作。 - 生成流水线报告:将构建过程中的日志、测试结果、代码覆盖率等信息汇总成一份流水线报告。 - 将报告发送给 GitLab:使用 GitLab 提供的 API,将流水线报告发送给 GitLab。 2. 创建 GitLab Pipeline 接下来,在 GitLab 中创建一个 Pipeline,用于触发 Jenkins Job 执行。具体而言,需要在 GitLab 中创建一个 `.gitlab-ci.yml` 文件,配置如下: ``` stages: - test jenkins: stage: test script: - curl -X POST http://<JENKINS_HOST>/job/<JOB_NAME>/build --user <USERNAME>:<API_TOKEN> --data-urlencode json='{"parameter": [{"name":"GITLAB_SOURCE_BRANCH", "value":"$CI_MERGE_REQUEST_SOURCE_BRANCH"}, {"name":"GITLAB_TARGET_BRANCH", "value":"$CI_MERGE_REQUEST_TARGET_BRANCH"}, {"name":"GITLAB_PROJECT_ID", "value":"$CI_PROJECT_ID"}, {"name":"GITLAB_MERGE_REQUEST_IID", "value":"$CI_MERGE_REQUEST_IID"}, {"name":"GITLAB_MERGE_REQUEST_TITLE", "value":"$CI_MERGE_REQUEST_TITLE"}, {"name":"GITLAB_CI_PIPELINE_ID", "value":"$CI_PIPELINE_ID"}, {"name":"GITLAB_CI_COMMIT_SHA", "value":"$CI_COMMIT_SHA"}]}' -H "Content-Type:application/x-www-form-urlencoded" only: - merge_requests ``` 这个配置文件中包含一个 `jenkins` Job,它的作用是触发 Jenkins Job 执行。具体而言,它通过 `curl` 命令调用 Jenkins 的 API,将 GitLab 中的一些信息(如分支、项目 ID、合并请求 ID 等)传递给 Jenkins,以便 Jenkins执行 Job 时获取这些信息。 3. 在 Jenkins 中配置构建参数 为了使 Jenkins Job 能够获取 GitLab 中的一些信息,需要在 Jenkins 中配置一些构建参数。具体而言,需要在 Jenkins Job 的配置页面中添加以下参数: - GITLAB_SOURCE_BRANCH:合并请求的源分支。 - GITLAB_TARGET_BRANCH:合并请求的目标分支。 - GITLAB_PROJECT_ID:GitLab 项目的 ID。 - GITLAB_MERGE_REQUEST_IID:合并请求的 ID。 - GITLAB_MERGE_REQUEST_TITLE:合并请求的标题。 - GITLAB_CI_PIPELINE_ID:GitLab 的 Pipeline ID。 - GITLAB_CI_COMMIT_SHA:GitLab 的 Commit SHA。 这些参数的值将在触发 Jenkins Job 时通过 API 传递进来,并且可以在 Jenkins Job 中使用。 4. 在 Jenkins 中配置流水线 最后,在 Jenkins 中配置流水线,用于执行构建操作、生成流水线报告,并将报告发送给 GitLab。具体而言,可以使用 Jenkins 的 Pipeline 语法,编写一个包含以下步骤的流水线: - 拉取代码:从 GitLab 上指定的分支中拉取代码。 - 执行构建操作:根据项目的具体需求,执行编译、测试、打包、部署等操作。 - 生成流水线报告:将构建过程中的日志、测试结果、代码覆盖率等信息汇总成一份流水线报告。 - 将报告发送给 GitLab:使用 GitLab 提供的 API,将流水线报告发送给 GitLab。 具体而言,可以使用 Jenkins 的 `sh` 命令执行 Shell 脚本,或者使用 Jenkins 插件执行特定的构建操作。在生成流水线报告时,可以使用 Jenkins 的插件或者自定义脚本,将日志、测试结果、代码覆盖率等信息汇总成一份报告。在将报告发送给 GitLab 时,可以使用 Jenkins 的 `curl` 命令调用 GitLab 的 API,将报告发送到指定的合并请求中。 以上就是一个 GitLab 触发 Jenkins 执行流水线并将流水线结果反馈给 GitLab 的示例,具体的流水线操作需要根据项目的实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷来辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值