Gitlab ci - 工件应用程序 jar 的差异
Posted
技术标签:
【中文标题】Gitlab ci - 工件应用程序 jar 的差异【英文标题】:Gitlab ci - differences in artifacts app jar 【发布时间】:2019-11-04 02:20:00 【问题描述】:我的码头文件:
FROM openjdk:8u201-jdk-alpine3.9
ADD target/app-snapshot-0.0.1.jar .
在gitlab-ci runner中,maven构建过程中:
maven:
image: maven:3-jdk-8
stage: maven
script:
- "mvn clean package -e"
artifacts:
name: "app-snapshot"
paths:
- ./target/app-snapshot-0.0.1.jar
build:
stage: build
script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- BUILD_IMAGE_NAME=$CI_REGISTRY_IMAGE:`echo "$CI_BUILD_REF_NAME" | tr /# _`
- docker build --pull --force-rm=true -t "$BUILD_IMAGE_NAME" .
- docker push "$BUILD_IMAGE_NAME"
但是,当我在提交、更改等之后使用 docker 映像时,我仍然看到第一个应用程序 .jar,没有任何更改。
我的错误在哪里?我想看看 - 在构建过程之后 - 我对工件 jar 应用程序的所有更改。
【问题讨论】:
我不明白你的所有问题,但我认为你有缓存问题。也许,(我说也许)artifacts
指令缓存了你以前的 .jar。
问题是:在构建过程之后,当我使用 docker 映像时 - 我看到了我的应用程序的第一个版本 - 没有更改、更新等。
你什么时候构建你的 docker 镜像?
在 gitlab-ci 文件中,在构建过程中。请查看我的原始帖子 - 已更新。
【参考方案1】:
我无法复制问题,但有一些方法可以“解决”:
-
尝试修复缩进:
maven:
image: maven:3-jdk-8
stage: maven
script:
- "mvn clean package -e"
artifacts:
name: "app-snapshot"
paths:
- ./target/app-snapshot-0.0.1.jar
-
在工件中使用模式:(当版本更改时您不需要更改代码)
.gitlab-ci.yml
:
artifacts:
name: "app-snapshot"
paths:
- target/*.jar
Dockerfile
:
FROM openjdk:8u201-jdk-alpine3.9
ADD target/*.jar .
使用dependencies
docs:
在构建作业时,从 maven 定义依赖项:
build:
stage: build
script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- BUILD_IMAGE_NAME=$CI_REGISTRY_IMAGE:`echo "$CI_BUILD_REF_NAME" | tr /# _`
- docker build --pull --force-rm=true -t "$BUILD_IMAGE_NAME" .
- docker push "$BUILD_IMAGE_NAME"
dependencies:
- maven
-
使用
artifacts:expire
docs是一个好习惯
.gitlab-ci.yml
:
artifacts:
name: "app-snapshot"
expire_in: 15 min #Just a example
paths:
- target/*.jar
【讨论】:
非常感谢您的回复。它可以帮助我清除项目中的一些代码。以上是关于Gitlab ci - 工件应用程序 jar 的差异的主要内容,如果未能解决你的问题,请参考以下文章
从 gitlab-ci dir 中获取所有工件并使其成为工件
如何在 .gitlab-ci.yml 中指定通配符工件子目录?