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

时间:2017-12-10 14:52:31

标签: jenkins jenkins-pipeline

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

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

但是,就我可以使用“管道”进行研究而言,应该更好地使用build + test + deploy运行该过程。所以我创建了一个管道,还写了一个jenkins文件。

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 个答案:

答案 0 :(得分:1)

存储库内的定义(Jenkinsfile

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

这具有很大的优势,即您的管道也是版本化的。使用 Multibranch Project ,您可以将Jenkins指向您的Git仓库,它将自动发现包含此类Jenkinsfile的所有分支(并为每个分支创建一个作业)。您可以在documentation

中找到更多信息

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

enter image description here

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

enter image description here

作业中的定义

如果您真的不想将管道放入存储库(我不建议这样做),那么您可以使用checkout step来获取代码:

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'
                }
            }
        }
// ...

可以在step documentation中找到更多结帐选项(例如其他分支)。

最后,定期更改要构建的作业:

enter image description here

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