Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
子目录中处理模块的jenkins管道脚本_Jenkins_Jenkins Pipeline - Fatal编程技术网

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

子目录中处理模块的jenkins管道脚本,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我有一个git url maven项目,我只想处理它的一个子模块。 我用管道脚本编写: ... stage("mvn build") { steps { script { sh "mvn package -DskipTests=true" } } } 出现错误:您指定的目标

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

...    
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的答案