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

Des*_*ond 5 continuous-integration jenkins jacoco docker docker-compose

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

文件

#### 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" ]
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

lee*_*n24 1

$APP_HOME/target如果我理解正确,您希望您的詹金斯奴隶可以看到的内容吗?如果是这样,您可能需要重新考虑您的方法。

Jenkins 正在运行 Docker 构建,该构建会构建您的应用程序并在下面输出代码覆盖率报告$APP_HOME/target,但是由于您是在 Docker 中构建它,因此这些文件将不可用于从属设备,而是图像本身。

我会考虑在 Docker 构建之外运行代码覆盖率,或者您可能需要做一些黑客操作,例如运行此构建,并将文件从映像复制到您的${WORKSPACE}容器中,我相信您必须先在容器中运行它,然后复制文件然后销毁容器。