我正在尝试使用Jenkins为Maven项目构建CI / CD管道 . 我似乎找不到任何关于如何在另一个Jenkins声明性管道阶段使用mvn包生成的.jar文件的正确例子 . 我需要jar文件在将其上传到docker-registry之前制作一个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"]
EDIT 1----------------------------------------------------------------------:
拉斯洛斯回答了这个伎俩,因为我注意到我的.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"]
2 回答
您正在以“targetfiles”名称存储jar文件 . 这很好 .
我认为缺少的是从藏匿处弹出,尝试添加如下所示的unstash行 . 这些文件将与您隐藏文件时的位置完全相同 . 在你的情况下“目标/” .
您可以对所有阶段使用相同的dockerfile,只需在其上安装docker cmd并将docker.sock挂载到它 .
将其添加到Dockerfile:
并运行设置Jenkinsfile如下: