13-Jenkins-使用Dockerfile生成镜像
2021-12-17 本文已影响0人
紫荆秋雪_文
一、Dockerfile
FROM openjdk:8-jre-alpine
LABEL maintainer="Raven"
COPY target/*.jar /app.jar
RUN apk add -U tzdata; \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime; \
echo 'Asia/Shanghai' >/etc/timezone; \
touch /app.jar;
ENV JAVA_OPTS=""
ENV PARAMS=""
EXPOSE 8000
ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /app.jar $PARAMS" ]
# 运行命令 docker run -e JAVA_OPTS="-Xmx512m -Xms33 -" -e PARAMS="--spring.profiles=dev --server.port=8080" -jar /app/app.jar
二、生成镜像
stage('生成镜像'){
steps {
echo'生成镜像'
// 当前所在位置
sh 'pwd && ls -alh'
// 当前可用的环境信息
sh 'printenv'
// 使用 Dockerfile 来生成镜像
sh 'docker build -t jenkins-pipeline .'
}
}
执行生成镜像命令失败.png
失败原因:没有jar包
- 在 Maven编译阶段的工作目录是 WORKSPACE=/var/jenkins_home/workspace/Jenkins-pipeline@2 Maven编译阶段的工作目录.png
- 在生成镜像阶段的工作目录是WORKSPACE=/var/jenkins_home/workspace/Jenkins-pipeline 生成镜像阶段的工作目录.png
-
由于两个步骤的工作目录不同,所以在生成镜像是拿不到 jar 包
-
修改 Maven 编译的工作目录 WORKSPACE
sh 'cd "${WORKSPACE}" && mvn clean package -s "/var/jenkins_home/appConfig/maven/settings.xml" -Dmaven.test.skip=true'
image.png
-
发现 cd WORKSPACE 后再执行maven打包依然是错的,依然还是临时目录,这是为什么?这是由于Jenkinsfile文件中在执行maven编辑阶段时我们使用了agent,所以只要在agent之后执行的命令都是在临时目录中执行的。所以此时的 WORKSPACE 是临时的目录
-
通过定义环境变量来拿到 工作目录
// 定义环境变量
environment {
WORKSPACE_ENV = "${WORKSPACE}"
}
- cd 进入环境变量 再执行打包
sh 'cd "${WORKSPACE_ENV}" && mvn clean package -s "/var/jenkins_home/appConfig/maven/settings.xml" -Dmaven.test.skip=true'
生成镜像.png
- 容器启动失败,报
no main manifest attribute, in /app.jar
- 修改pom.xml文件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>