gpt4 book ai didi

docker - 容器化应用程序 (Docker) 和 Jenkins Slave CICD

转载 作者:行者123 更新时间:2023-12-04 21:01:40 27 4
gpt4 key购买 nike

我创建了一个带有工作目录的 jenkins slave。然后我有一个带有 Dockerfile 的 maven java 应用程序。

Dockerfile

#### BUILD image ###
FROM maven:3-jdk-11 as builder
RUN mkdir -p /build
WORKDIR /build
COPY pom.xml /build
RUN mvn -B dependency:resolve dependency:resolve-plugins
COPY /src /build/src
RUN mvn package

### RUN ###
FROM openjdk:11-slim as runtime
EXPOSE 8080
ENV APP_HOME /app
ENV JAVA_OPTS=""

RUN mkdir $APP_HOME
RUN mkdir $APP_HOME/config
RUN mkdir $APP_HOME/log

RUN mkdir $APP_HOME/src

VOLUME $APP_HOME/log
VOLUME $APP_HOME/config

WORKDIR $APP_HOME

COPY --from=builder /build/src $APP_HOME/src
COPY --from=builder /build/target $APP_HOME/target
COPY --from=builder /build/target/*.jar app.jar

ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar" ]

Jenkins slave 看到这个 Dockerfile 并执行它。它构建目标文件夹。在目标文件夹中,我有 Jacoco 来显示代码覆盖率。

Jenkins 从工作区无法在 Jenkins jacoco 页面上看到该目标文件夹以显示代码覆盖率。我怎样才能使这个可见?我在我的 docker-compose 文件中尝试了卷,如图所示

docker-compose.yml
version: '3'
services:
my-application-service:
image: 'my-application-image:v1.0'
build: .
container_name: my-application-container
ports:
- 8090:8090
volumes:
- /home/bob/Desktop/project/jenkins/workspace/My-Application:/app

但是,我无法在工作区中获取目标文件夹。我怎样才能让 jenkins slave 看到这个 jacoco 代码覆盖率?

最佳答案

看起来你有一个从/home/bob/Desktop/project/jenkins/workspace/My-Application 到 docker 镜像中/app 的映射卷,所以通常,如果你将你的 jacoco 报告复制回/app/...,它应该出现在 Jenkins Slave 上。

但是卷映射仅适用于 docker 构建过程的第一阶段。一旦您开始第二阶段(在 FROM openjdk:11-slim as runtime 之后),就不再有映射卷。所以这些行将数据复制到目标图像的/app 目录,而不是原始映射目录。

COPY --from=builder /build/src  $APP_HOME/src
COPY --from=builder /build/target $APP_HOME/target

如果你在第一阶段这样做,我认为你可以让它工作:
RUN cp /build/target /app/target

在第二阶段,您可能只需要构建的 jar 文件,因此您只需要:
COPY --from=builder /build/target/*.jar app.jar

另一种方法是在 docker 镜像生成后从 docker 镜像本身中提取数据,但这需要一些命令行功夫:
docker cp $(docker ps -a -f "label=image=$IMAGE" -f "label=build=$BUILDNR" -f "status=exited" --format "{{.ID}}"):/app/target .

另见 https://medium.com/@cyril.delmas/how-to-keep-the-build-reports-with-a-docker-multi-stage-build-on-jenkins-507200f4007f

关于docker - 容器化应用程序 (Docker) 和 Jenkins Slave CICD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59206231/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com