如何在另一个Jenkins声明式pipe道阶段使用mvn包生成的Jar?

我试图与jenkinsMaven项目build立CI / CDpipe道。 我似乎无法find任何体面的例子,如何在另一个Jenkins声明式pipe道阶段使用由mvn包生成的.jar文件。 我需要将jarfile upload到docker-registry之前创build一个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", ' .') } } } } } 

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"] 

编辑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", ' .') } } } } } 

并修改了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"] 

你将这个jar文件存储在“targetfiles”的名字下。 这很好。

我认为是缺less的是从藏匿处popup,尝试添加如下所示的unstash线。 这些文件与您藏起来的位置完全相同。 在你的情况下“目标/”。

 stage('Deploy') { steps { script{ unstash 'targetfiles' sh 'docker build image-name:test' } } } 

您可以在所有阶段使用相同的dockerfile,只需在其上安装docker cmd并将docker.sock安装到它。

将其添加到Dockerfile中:

 RUN apt-get update && \ apt-get install -y apt-transport-https ca-certificates curl software-properties-common && \ curl -fsSL https://download.docker.com/linux/centos/gpg | apt-key add - && \ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/centos trusty stable" && \ apt-get update && \ apt-get install -y docker-ce 

然后运行像这样设置Jenkinsfile:

 pipeline { agent { docker { image 'maven:3-alpine' args '-u root -v /root/.m2:/root/.m2 -v /var/run/docker.sock:/var/run/docker.sock' } } stage('Build Jar'){ steps { sh 'mvn package' stash includes: 'target/*.jar', name: 'targetfiles' } } stage('Deploy') { steps { script{ sh 'docker build image-name:test' } } } }