jenkins管道脚本处理子目录中的模块

时间:2019-08-12 10:00:07

标签: jenkins jenkins-pipeline

我有一个git url maven项目,我只想处理其子模块之一。 我用管道脚本编写:

...    
stage("mvn build") {
                steps {
                    script {
                        sh "mvn package -DskipTests=true"
                    }
                }
            }
出现

错误:您指定的目标需要一个项目来执行,但此目录中没有POM(/ xx / jenkins / workspace / biz-commons_deploy)。所以我添加命令:

sh "cd cmiot-services/comm" # subdir of biz-commons_deploy
def PWD = pwd();
echo "@@=${PWD} "
sh "mvn package -DskipTests=true"

不起作用,打印@@ = / root /。jenkins / workspace / biz-commons_deploy,错误与之前相同。 我该如何解决此问题以及回声和错误为什么使用不同的用户空间?
我使用sh "mvn -f cmiot-services/comm/pom.xml package -DskipTests=true"进行操作,仍然不知道这两个用户路径来自何处以及为什么sh cd无法正常工作。

3 个答案:

答案 0 :(得分:1)

steps {
  sh '''
    # list items in current directory to see where is your pom.xml
    ls -l

    # run job by comment out following two lines, if you don't know the 
    # relative path of folder where pom.xml insides exactly
    cd <folder where pom.xml insides>
    mvn package -DskipTests=true 
  '''
}

答案 1 :(得分:1)

正如Yong回答的那样,每个sh步骤都是独立的,想象一下詹金斯每次都在您的奴隶上打开一个新的ssh连接。

对于您的脚本,为什么不使用dir步骤中的build而不是sh的解决方法?

类似的事情应该做到:

stage("mvn build") {
  steps {
    script {
      dir('cmiot-services/comm') {
        sh "mvn package -DskipTests=true"
      }
    }
  }
}

答案 2 :(得分:0)

在执行Jenkins Pipline时,当前目录是Jenkins工作区目录。 您可以添加一个步骤来克隆代码所在的存储库(确保正在运行Jenkins实例的环境能够连接到您的存储库并进行克隆)。

然后,您可以导航到具有pom.xml的目录。最后执行maven命令。

...  
stage("Clone Repo") {
                steps {
                    script {
                        sh "git clone ssh://git@bitbucket.org:repo/app.git"
                    }
                }
            }

stage("mvn build") {
                steps {
                    script {
                        sh "cd app/"
                        sh "pwd"
                        sh "mvn package -DskipTests=true"
                    }
                }
            }