子目录中处理模块的jenkins管道脚本
我有一个git url maven项目,我只想处理它的一个子模块。 我用管道脚本编写:子目录中处理模块的jenkins管道脚本,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我有一个git url maven项目,我只想处理它的一个子模块。 我用管道脚本编写: ... stage("mvn build") { steps { script { sh "mvn package -DskipTests=true" } } } 出现错误:您指定的目标
...
stage("mvn build") {
steps {
script {
sh "mvn package -DskipTests=true"
}
}
}
出现错误:您指定的目标需要执行一个项目,但此目录中没有POM(/xx/jenkins/workspace/biz-commons\u 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\u deploy,错误与以前相同。
如何解决此问题,以及为什么回音和错误使用不同的用户空间?我使用
sh“mvn-f cmiot services/comm/pom.xml package-DskipTests=true”
,仍然不知道这两个用户路径来自何处以及为什么sh cd不起作用。执行Jenkins Pipline时,当前目录是Jenkins workspace目录。
您可以添加一个步骤来克隆代码所在的repo(假定运行Jenkins实例的环境能够连接到您的repo和克隆)
然后可以导航到包含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"
}
}
}
执行Jenkins Pipline时,当前目录是Jenkins工作区目录。 您可以添加一个步骤来克隆代码所在的repo(假定运行Jenkins实例的环境能够连接到您的repo和克隆) 然后可以导航到包含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"
}
}
}
步骤{
“嘘”
#列出当前目录中的项目以查看pom.xml的位置
ls-l
#如果您不知道以下两行,请通过注释来运行作业
#pom.xml所在文件夹的相对路径
光盘
mvn包-DskipTests=true
'''
}
步骤{
“嘘”
#列出当前目录中的项目以查看pom.xml的位置
ls-l
#如果您不知道以下两行,请通过注释来运行作业
#pom.xml所在文件夹的相对路径
光盘
mvn包-DskipTests=true
'''
}
正如Yong所回答的,每个sh步骤都是独立的,想象一下Jenkins每次都在您的从属服务器上打开一个新的ssh连接
对于您的脚本,与其使用sh解决方案,为什么不使用内建步骤
像这样的东西应该可以做到:
stage("mvn build") {
steps {
script {
dir('cmiot-services/comm') {
sh "mvn package -DskipTests=true"
}
}
}
}
正如Yong所回答的,每个sh步骤都是独立的,假设Jenkins每次都在您的从属服务器上打开一个新的ssh连接 对于您的脚本,与其使用sh解决方案,为什么不使用内建步骤 像这样的东西应该可以做到:
stage("mvn build") {
steps {
script {
dir('cmiot-services/comm') {
sh "mvn package -DskipTests=true"
}
}
}
}
您可以认为每个
sh'
都是单独的子流程,它们不能相互影响。您在上一个sh
步骤中输入的某个文件夹无法影响下一个sh
步骤,除非您将bash cmd放入一个sh
步骤中。您尝试过下面的任何答案吗@Yuxh您可以认为每个sh'
都是单独的子流程,它们不能相互影响。您在上一个sh
步骤中输入的某个文件夹无法影响下一个sh
步骤,除非您将bash cmd放入一个sh
步骤中。您尝试过下面的任何答案吗@Yuxh你的方法和我试过的一样,不起作用@yong的答案是可行的,你也可以试试LedFactory的答案你的方法和我试过的一样,不起作用@yong的答案是可行的,你也可以试试LedFactory的答案