Jenkins Pipeline使用git pull构建触发器,怎么样?

ayd*_*gdu 7 jenkins jenkins-pipeline

我有一个maven,java项目,我正在使用git.我想在tomcat服务器上使用jenkins进行build + test + deploy(.war文件)(在同一设备上)

我当前的问题是关于通过将更改推送到git存储库主机来触发构建.然而它确实与詹金斯自由泳项目合作.在那里,我可以设置我的git存储库,因此它检测到任何更改并运行构建.

但据我所知,使用"管道"进行研究应该更好地运行build + test + deploy.所以我创建了一个管道,还写了一个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'
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

目前的问题是,在管道项目中,我找不到设置git存储库的选项.目前,当我推动变革时,jenkins不跟踪git的任何变化.

我要做什么,所以jenkins在git中检测到更改时运行构建(就像在自由式项目中一样)?

我非常感谢你.

Ste*_*ing 1

存储库内的定义 ( Jenkinsfile)

Jenkinsfile您应该将管道定义放入存储库内名为的文件中。

这样做的一个很大的优点是您的管道也是版本化的。使用Multibranch Project,您可以将 Jenkins 指向您的 Git 存储库,它会自动发现包含此类的所有分支Jenkinsfile(并为每个分支创建一个作业)。您可以在文档中找到更多信息。

如果您不希望不同分支的作业,您还可以配置作业以从 SCM 获取管道定义:

在此输入图像描述

指定后,您可以将作业配置为定期轮询 SCM 更改:

在此输入图像描述


工作中的定义

如果您确实不想将管道放入存储库(我不推荐这样做),那么您可以使用以下步骤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'
                }
            }
        }
// ...
Run Code Online (Sandbox Code Playgroud)

更多结帐选项(例如其他分支)可以在步骤文档中找到。

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

在此输入图像描述

现在我正在努力(在编辑帖子时):这可能每次都会构建项目(示例中为 5 分钟)。我不确定是否currentBuild.changeSets包含使用 明确签出的更改checkout。如果是,那么您可以检查它是否包含更改,并在这种情况下中止构建。一切都不是很好...