【问题标题】:Jenkins pipeline: How to build new artifacts only if has a new commit詹金斯管道:只有在有新提交的情况下才能构建新工件
【发布时间】:2017-08-17 16:13:03
【问题描述】:
stage('Checkout repo'){
    git branch: 'mybranch', 
    credentialsId: '6b83e39e-1c8c-44c2-9165-b1f5a857f6cb', 
    url: 'git@gitlab.com:myproject.git'}

stage('run tests'){
    sh 'mvn test'
}

stage('build artefact'){
    sh 'mvn clean package'
}

只有在有新提交的情况下,如何运行测试并制作新的工件? 没有触发器

【问题讨论】:

  • 你是如何使管道运行的?
  • 我正在学习 jenkins 并且讲师要求找到那种方式
  • 管道不能神奇地自行运行。它必须手动启动或由作业配置页面中的构建触发器之一触发。目前尚不清楚您的要求是什么。您应该 edit 对此问题进行扩展,什么是允许的,什么是不允许的。

标签: git maven jenkins


【解决方案1】:

您可以使用Git Plugin 中的环境变量并创建一个条件:

if (env.GIT_COMMIT != env.GIT_PREVIOUS_SUCCESSFUL_COMMIT) {
  stage('run tests'){
    sh 'mvn test'
  }
  stage('build artefact'){
    sh 'mvn clean package'
  }
}
  • GIT_COMMIT - 当前提交的 SHA
  • GIT_PREVIOUS_SUCCESSFUL_COMMIT - SHA 之前从同一分支成功构建的提交。

【讨论】:

  • 遗憾的是,这似乎并不可靠。我收到错误:Running in Durability level: PERFORMANCE_OPTIMIZED org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: WorkflowScript: 99: Expected a stage @ line 99, column 7. if (env.GIT_COMMIT != env.GIT_PREVIOUS_SUCCESSFUL_COMMIT) { ^ 1 error
【解决方案2】:

有三种方法可以自动触发您的 Jenkins 作业。

  1. 您可以在管道作业中使用SCM polling,以便在每次发生更改时触发您的作业。

    您可以在管道作业配置的 ~Build Triggers 部分下启用 Poll SCM

  2. 当您的GitHubrepository 发生变化时,您可以使用Webhooks 自动触发您的作业。

    按照documentation 执行Webhook

  3. 当您的存储库中有提交时,您可以使用post-commithook 来触发作业。

    在存储库的.git/hooks 目录下创建一个名为post-commit 的文件,并在其中添加以下脚本:

    #!/bin/bash curl --user 'user:pass' -X POST "http://server.org.com/jenkins/job/JOB-NAME/build" --data token=mytoken1 --data delay=0sec

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2019-02-27
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多