使用CLONE_STRATEGY:none缓存时,Gitlab工作目录未清理



我有一个GitLab管道设置,它有一个包步骤,用于在标记事件期间进行maven构建,还有一个版本,用于使用curl和GitLab release-cli将jar上传到GitLab通用包注册表。

我所期望的是将.m2的缓存加载到包步骤中,以允许mvn-clean包完成它的任务。然后只存档创建的jar和测试结果。

发布步骤应该从清理开始,没有git克隆,没有缓存,只有jar和测试结果。

取而代之的是"查找"显示发布步骤包含所有内容,包括

  • Git目录(.Git(
  • 已完全签出的存储库
  • .m2缓存
  • 目标(完全按照包步骤生成(

来自缓存文档(https://docs.gitlab.com/ee/ci/caching/)在GitLab上声明

  • Archive:"dependencies"关键字用于控制哪个作业获取工件
  • 禁用缓存使用"Cache:[]">

为什么GitLab在发布工作中投入了这么多内容?发布作业有时会失败,因为它从以前的标签中找到了多个Jar文件(IE清理和存档保存的是以前的版本(。

gitlab-ci.yml

variables:
MAVEN_CLI_OPTS: "-s $CI_PROJECT_DIR/.m2/settings.xml"
MAVEN_VERSION_PLUGIN_VERSION: 2.11.0
MAVEN_ARTIFACT_NAME: test-component
GIT_CLEAN_FLAGS: -ffd
PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${MAVEN_ARTIFACT_NAME}"
cache:
key: primary
paths:
- .m2/repository
stages:
- package
- release
package:
stage: package
image: maven:latest
script:
- mvn ${MAVEN_CLI_OPTS} clean package
artifacts:
paths:
- target/*.jar
- target/surefire-reports
only:
- tags
- merge_requests
- branches
except:
- main
release:
stage: release
image: alpine:latest
cache: []
variables:
GIT_STRATEGY: none
dependencies:
- package
script:
- |
apk add curl gitlab-release-cli
find .
JAR_NAME=`basename target/${MAVEN_ARTIFACT_NAME}-${CI_COMMIT_TAG}.jar`
'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file target/${JAR_NAME} ${PACKAGE_REGISTRY_URL}/${CI_COMMIT_TAG}/${JAR_NAME}'
release-cli create --name "Release $CI_COMMIT_TAG" --description "$TAG_MESSAGE" --tag-name ${CI_COMMIT_TAG} --assets-link "{"name":"jar","url":"${PACKAGE_REGISTRY_URL}/${CI_COMMIT_TAG}/${JAR_NAME}"}"
only:
- tags

请参阅GIT_STRATEGY:上的GitLab文档

none的Git策略也重新使用本地工作副本,但跳过了GitLab通常完成的所有Git操作。GitLab Runner预克隆脚本也会被跳过(如果存在(。此策略可能意味着您需要将fetchcheckout命令添加到.gitlab-ci.yml脚本中。

它可以用于专门对工件进行操作的作业,如部署作业。Git存储库数据可能存在,但可能已经过时。您应该只依赖从缓存或工件带入本地工作副本的文件。

因此GitLab文档非常清楚,您应该始终期望git存储库存在。当你想专门处理工件时,我可以创建一个新的临时目录,并显式引用工件的路径,而不是依赖于一个完全干净的工作目录。

最新更新