gpt4 book ai didi

java - 如何在另一个 Jenkins 声明性管道阶段使用 mvn package 生成的 Jar?

转载 作者:搜寻专家 更新时间:2023-11-01 02:20:15 26 4
gpt4 key购买 nike

我正在尝试使用 Jenkins 为 Maven 项目构建 CI/CD 管道。我似乎找不到任何关于如何在另一个 Jenkins 声明性管道阶段使用 mvn package 生成的 .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", ' .')
}
}
}
}
}

jetty 文件:

#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”下。这很好。

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

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

关于java - 如何在另一个 Jenkins 声明性管道阶段使用 mvn package 生成的 Jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47302658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com