【发布时间】:2018-04-28 09:32:44
【问题描述】:
我正在尝试使用 Jenkins 为 Maven 项目构建 CI/CD 管道。我似乎找不到任何关于如何在另一个 Jenkins 声明性管道阶段使用 mvn 包生成的 .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", ' .')
}
}
}
}
}
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 假设的名称不同。 这是我工作的最终詹金斯文件:
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"]
【问题讨论】:
-
您可以在所有阶段使用相同的 dockerfile,只需在其上安装 docker cmd 并将 docker.sock 挂载到它。
-
使用声明性语法如何安装 docker cmd 并安装 docker.sock?
-
我会把它作为答案
标签: java maven docker jenkins devops