我正在尝试使用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"]
答案 0 :(得分:5)
您正在使用名称' targetfiles'存储jar文件。这很好。
我认为缺少的是从藏匿处弹出,尝试添加如下所示的unstash行。这些文件将与您隐藏文件时的位置完全相同。在"目标/"在你的情况下。
for (;;)
do
ssh remoteserver
done
答案 1 :(得分:0)
您可以为所有阶段使用相同的dockerfile,只需在其上安装docker cmd并将docker.sock挂载到它。
将其添加到Dockerfile:
RUN apt-get update && \
apt-get install -y apt-transport-https ca-certificates curl software-properties-common && \
curl -fsSL https://download.docker.com/linux/centos/gpg | apt-key add - && \
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/centos trusty stable" && \
apt-get update && \
apt-get install -y docker-ce
运行设置Jenkins文件如下:
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-u root -v /root/.m2:/root/.m2 -v /var/run/docker.sock:/var/run/docker.sock'
}
}
stage('Build Jar'){
steps {
sh 'mvn package'
stash includes: 'target/*.jar', name: 'targetfiles'
}
}
stage('Deploy') {
steps {
script{
sh 'docker build image-name:test'
}
}
}
}