Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
Java 如何相对于子目录运行jenkins管道?_Java_Maven_Spring Boot_Jenkins_Jenkins Pipeline - Fatal编程技术网

Java 如何相对于子目录运行jenkins管道?

Java 如何相对于子目录运行jenkins管道?,java,maven,spring-boot,jenkins,jenkins-pipeline,Java,Maven,Spring Boot,Jenkins,Jenkins Pipeline,我有一个git存储库,其中包含两个模块。一个是基于SpringBoot的后端模块,另一个是基于VueJS的前端模块 app-root - backend - frontend 我有一个声明式的文件,用相关的maven命令构建我的后端模块。我想从后端目录中执行所有这些maven命令 一个选项是对所有命令分别使用dir(“backend”){….},这在我看来很难看 是否有其他选项指示Jenkins从子目录中执行整个管道?后端和前端模块中可以有Jenkins文件,只需在每个管道上指向它们,

我有一个git存储库,其中包含两个模块。一个是基于SpringBoot的后端模块,另一个是基于VueJS的前端模块

app-root
  - backend
  - frontend
我有一个声明式的文件,用相关的maven命令构建我的后端模块。我想从后端目录中执行所有这些maven命令

一个选项是对所有命令分别使用
dir(“backend”){….}
,这在我看来很难看


是否有其他选项指示Jenkins从子目录中执行整个管道?

后端和前端模块中可以有Jenkins文件,只需在每个管道上指向它们,例如:

在管道本身上,您只需
cd
到子模块并执行其命令:

pipeline {
   agent any

   stages {
        stage('build') {
            steps {
                 sh 'cd backend'
                 sh 'mvn clean package'
             }
       }

    //other stages
   }

}
如果您不想将
cd
复制到子模块中,您可以使用,但在这种情况下,您必须相应地更改Jenkins文件的路径,因为它将位于根文件夹中。

我最后进入了“准备项目”阶段,将子目录内容放入根目录中

删除所有根目录(stage“clean”)也可能是一个好主意,以绝对确保没有以前版本的遗留内容

node {
    def dockerImage

    stage('clean') {
      sh "rm -rf *"
    }

    stage('checkout') {
        checkout scm
    }

    // need to have only 'backend' subdir content on the root level
    stage('prepare project') {
        // The -a option is an improved recursive option, that preserve all file attributes, and also preserve symlinks.
        // The . at end of the source path is a specific cp syntax that allow to copy all files and folders, included hidden ones.
        sh "cp -a ./backend/. ."
        sh "rm -rf ./backend"
        // List the final content
        sh "ls -la"
    }

    stage('build docker image') {
        dockerImage = docker.build("docker-image-name")
    }

    stage('publish docker image') {
        docker.withRegistry('https://my-private-nexus.com', 'some-jenkins-credentials-id') {
            dockerImage.push 'latest'
        }
    }
}

您希望前端和后端有两个单独的管道还是一个管道?是。目前,我只为后端使用管道,但我也将为前端创建一个单独的管道。这就是我提到的问题。必须为每个命令使用dir(“后端”)或“cd模块”。我正在考虑是否有配置,使整个管道从目录中运行。不是每个命令都需要,只是第一次。另外,要把你的问题弄清楚,你只提到“dir很难看”,而没有说真正的问题是什么。如果cd有问题,那么稀疏签出是一种方法。我相信每个阶段都会在根文件夹的上下文中运行。因此,对于不同阶段的所有步骤,我们都需要将cd放入目录。是的,你是对的,因此如果
dir
对你来说是个问题,我认为你将不得不使用稀疏签出或使用分离的git存储库。我和你一样使用类似于sh'cd backend'的命令,但下面的命令仍然不会进入子目录,你知道为什么吗?