作者:手机用户2502900175 | 来源:互联网 | 2023-06-04 15:14
我正在尝试使用Jenkins为Maven项目构建CICD管道.我似乎找不到任何关于如何在另一个Jenkins声明性管道阶段使用mvn包生成的.jar文件的正确例子.我需要jar文件
我正在尝试使用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"]
编辑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"]
解决方法:
您正在以“targetfiles”名称存储jar文件.这很好.
我认为缺少的是从藏匿处弹出,尝试添加如下所示的unstash行.这些文件将与您隐藏文件时的位置完全相同.在你的情况下“目标/”.
stage('Deploy') {
steps {
script{
unstash 'targetfiles'
sh 'docker build image-name:test'
}
}
}