作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 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/
我是一名优秀的程序员,十分优秀!