美文网首页云原生
13-Jenkins-使用Dockerfile生成镜像

13-Jenkins-使用Dockerfile生成镜像

作者: 紫荆秋雪_文 | 来源:发表于2021-12-17 15:22 被阅读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>

相关文章

网友评论

    本文标题:13-Jenkins-使用Dockerfile生成镜像

    本文链接:https://www.haomeiwen.com/subject/kyuvfrtx.html