如何在另一个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' } } } }