使用git pull触发Jenkins流水线构建,该如何操作?

8
我有一个使用maven和java的项目,并且我正在使用git。我想要在同一设备上的tomcat服务器上使用jenkins进行构建、测试和部署(war文件)。
我的问题是如何通过向git仓库主分支推送更改来触发构建。然而,在jenkins freestyle项目中可以设置git仓库,以便检测任何更改并运行构建。但是据我所知,使用"pipeline"应该更好地运行构建 + 测试 + 部署过程。因此,我创建了一个管道,并编写了一个jenkinsfile。
pipeline {
    agent any

    stages {
        stage('Compile Stage') {
            steps {
               withMaven(maven: 'maven_3_5_1'){
               bat 'mvn clean compile'
               }
            }
        }
        stage('Testing Stage') {
            steps {
                withMaven(maven: 'maven_3_5_1'){
                    bat 'mvn test'
                }
            }
        }
        stage('Deployment Stage (WAR)') {
            steps {
                withMaven(maven: 'maven_3_5_1'){
                    bat 'mvn deploy'
                }
            }
        }
    }
}

目前的问题是,在管道项目中我找不到设置Git仓库的选项。当前,当我推送更改时,Jenkins不会跟踪Git中的任何更改。

我该怎么做,才能让Jenkins在Git检测到更改时运行构建(就像在自由样式项目中一样)?

非常感谢您的帮助。

1个回答

1

代码库中的定义(Jenkinsfile

您应该将管道定义放入名为 Jenkinsfile 的文件中,放在您的代码库中。

这样做的好处是您的管道也被版本化了。使用 多分支项目,您可以将 Jenkins 指向您的 Git 仓库,它将自动发现包含这种 Jenkinsfile 的所有分支(并为每个分支创建一个作业)。您可以在文档中找到更多信息。

如果您不想为不同的分支创建作业,您还可以配置作业从 SCM 中获取管道定义:

enter image description here

指定了这些内容后,您可以配置作业定期轮询SCM更改:

enter image description here


工作中的定义

如果你真的不想将你的流水线放入代码库(我不建议这样做),那么你可以使用checkout步骤来获取你的代码:

pipeline {
    agent any
    stages {
        stage('Compile Stage') {
            steps {
                checkout('https://git.example.com/repo.git')
                withMaven(maven: 'maven_3_5_1') {
                    bat 'mvn clean compile'
                }
            }
        }
// ...

步骤说明中可以找到更多结帐时的选项(例如其他分支)。

最后,将工作更改为定期构建:

enter image description here

现在我遇到了困难(在编辑帖子时):这可能每次都会构建项目(例如需要5分钟)。我不确定currentBuild.changeSets是否包含使用checkout明确检出的更改。如果是的话,您可以检查它是否包含更改,并在这种情况下中止构建。所有这些都不太好...


非常感谢。 "Poll SCM" - 但是哪个SCM?我在Jenkinsfile中输入的那个,使用“checkout('url.git')”...? - aydogdu
好的,只有在Pipeline/Definition中指定“来自SCM的管道脚本”才有意义。我会更新我的答案。 - StephenKing
值得注意的是最佳实践 H/5 * * * *,它意味着每5分钟执行一次,并使用哈希因子避免所有作业在完全相同的时间开始。 - Olmstov
1
这不是触发器,而是定期轮询 Git 仓库。 - Daniel
这是构建触发器。不确定您在评论中想要告诉我们什么。 - StephenKing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接