首页 > 解决方案 > 使用 Jenkins 只构建必要的

问题描述

像这样的回购:

repo
  - service1
  - service2
  - service3

现在我已经把 jenkinsfile 放在主目录上来构建并做一些事情,但是如果我在子文件夹 service1 中更改相同的内容,我只想重建服务 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 脚本

标签: jenkinsgroovycontinuous-integrationjenkins-pipeline

解决方案


您只需要找到上次和当前提交之间的区别:

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

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


推荐阅读