在另一个Jenkins声明式管道阶段中,如何使用mvn软件包生成的Jar?

Ton*_*rmi 4 java maven jenkins docker devops

我正在尝试使用Jenkins为Maven项目构建CI / CD管道。在另一个Jenkins声明式管道阶段中,我似乎找不到任何有关如何使用mvn软件包生成的.jar文件的示例。在将其上传到docker-registry之前,我需要用jar文件制作一个docker-image。这是jenkinsfile的相关部分:

pipeline {
  agent none
  stages{
    stage('Build Jar'){
        agent {
          docker {
            image 'maven:3-alpine'
            args '-v /root/.m2:/root/.m2'
          }
        }
        steps {
            sh 'mvn package'
            stash includes: 'target/*.jar', name: 'targetfiles'
        }
    }
    stage('Deploy') {
        agent {
            node {
                label 'DockerDefault'
            }
         }

      steps {
            script{
                def image = docker.build("image-name:test", ' .')
            }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

#install OS
FROM centos
#install java
RUN yum install -y java
#make directory structure to store temporary files
RUN mkdir -p /store
#put jar into container
ADD target/AdWordsProducer-1.0-SNAPSHOT-shaded.jar adwordsproducer.jar
#run jar
ENTRYPOINT ["java", "-jar", "/adwordsproducer.jar"]
Run Code Online (Sandbox Code Playgroud)

编辑1 ------------------------------------------------ ----------------------:

Laszlos的答案解决了这个问题,因为我注意到我的.jar文件的名称与dockerfile的名称不同。这是我最后的工作jenkinsfile:

pipeline {
  agent none
  stages{
    stage('Build Jar'){
        agent {
          docker {
            image 'maven:3-alpine'
            args '-v /root/.m2:/root/.m2'
          }
        }
        steps {
            sh 'mvn package'
            stash includes: 'target/*.jar', name: 'targetfiles'
        }
    }
    stage('Deploy') {
        agent {
            node {
                label 'DockerDefault'
            }
         }

      steps {
            script{
                unstash 'targetfiles'
                sh 'ls -l -R'
                def image = docker.build("image-name:test", ' .')
            }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

并修改dockerfile:

#install OS
FROM centos
#install java
RUN yum install -y java
#make directory structure to store temporary files
RUN mkdir -p /store
#put jar into container
#ADD target/AdWordsProducer-1.0-SNAPSHOT-shaded.jar adwordsproducer.jar
ADD target/AdWordsProducer-1.0-SNAPSHOT.jar adwordsproducer.jar
#run jar
ENTRYPOINT ["java", "-jar", "/adwordsproducer.jar"]
Run Code Online (Sandbox Code Playgroud)

小智 5

您正在将jar文件存储在“ targetfiles”名称下。很好

我认为缺少的是从存储中弹出,尝试添加显示行,如下所示。这些文件将与存放它们时的位置完全相同。在您的情况下的“目标/”下。

stage('Deploy') {
  steps {
        script{
            unstash 'targetfiles'
            sh 'docker build image-name:test'
        }
  }
}
Run Code Online (Sandbox Code Playgroud)