我有一个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无法正常工作。
答案 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"
}
}
}