詹金斯只构建必要的东西

时间:2018-08-08 15:53:27

标签: jenkins groovy continuous-integration jenkins-pipeline

像这样的回购:

repo
  - service1
  - service2
  - service3

现在我已经将jenkinsfile放在主目录中以进行构建和执行某些操作,但是如果我更改子文件夹service1中的相同内容,我只想重新构建service 1,该怎么办? 现在管道是这样的,但是我想使其更好,因为现在我重新构建了所有内容:

pipeline{
agent any
stages {
     stage('Build') {
     steps {
        script{
                sh '''
                cd security_manager;
                STAGING=true;
                sbt " -DSTAGING=$STAGING; reload; clean; compile;  docker:publish";
                '''
                sh '''
                cd storage_manager;
                STAGING=true;
                sbt " -DSTAGING=$STAGING; reload; clean; compile;  docker:publish";
                '''
                sh '''
                cd ;
                STAGING=true;
                sbt " -DSTAGING=$STAGING; reload; clean; compile;  docker:publish";
                '''
            }
        }
    }

我想在sh脚本之间放置相同的if / else,但不知道我必须做什么,因为我想在$ GIT_COMMIT和最后一次提交之间使用git diff检查文件,但是在if语句条件下,我无法放置shell脚本

1 个答案:

答案 0 :(得分:1)

您只需要查找上一次提交与当前提交之间的区别:

 def diff = sh(returnStdout: true, script: 'git diff @~..@')

然后由您自己决定如何处理。最简单的方法是从diff的每一行中仅提取更改的目录