GitLab release-job 创建一个版本,其中资产是artifacts.zip 而不是具体文件

问题描述 投票:0回答:1

我有这个脚本:

release-job:  # Valid release section within the job
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:latest              
  script:
    - | 
      echo "Getting Artifact Link"
      ARTIFACT_URL=$(cat artifact_url.txt | tr -d '\r')
      ARTIFACT_URL=${ARTIFACT_URL:2}
      echo "BIGProjectSetup.msi download URL - $ARTIFACT_URL"
      ASSETS_LINK="{\"name\":\"BIGProjectSetup.msi\",\"url\":\"$ARTIFACT_URL\",\"link_type\":\"package\"}"
      echo "Assets link JSON - $ASSETS_LINK"
      echo "Creating Release"
      release-cli create --name "BIGProject" --tag-name "TestRelease" --description "New version of BIGProject" --assets-link "$ASSETS_LINK"
  dependencies:
    - packaging
  needs:
    - packaging 

我遇到的问题是,在“部署”->“发布”部分中,单击下载链接后,我的下载器开始下载“artifacts.zip”而不是 BIGProjectSetup.msi。该链接使用正确且格式正确,如下所示:

https://code.com/bigproject/big-project/-/jobs/17106/artifacts/download?file=build_artifacts/BIGProjectSetup.msi

我在这里做错了什么吗?

非常感谢

docker gitlab release cicd artifacts
1个回答
0
投票

当您在 GitLab CI/CD 配置中为某个版本创建资产链接时,提供的链接必须直接指向您希望作为可下载资产提供的文件。

但是,GitLab 以特殊方式处理作业工件的链接。即使您在作业的工件存档中指定了指向工件文件的直接链接,单击“发布”部分中的链接也将导致下载整个工件存档(如

artifacts.zip
)而不是单个文件。

GitLab 默认情况下不提供通过“发布”部分直接从工件存档下载单个文件的机制。您提供的 URL 在技术上是正确的,并且指向

BIGProjectSetup.msi
应位于工件存档中的位置。尽管如此,GitLab 不会解析此 URL 来直接提供
BIGProjectSetup.msi
供下载。

作为替代方案,您可以考虑将

BIGProjectSetup.msi
文件托管在 GitLab 作业工件系统的外部。这意味着将文件上传到支持直接下载的其他位置,然后在您的
ASSETS_LINK
配置中使用该 URL。这将包括:

  • 专用文件托管服务
  • 云存储桶(AWS S3、Google Cloud Storage等)
  • 工件存储库(Artifactory、Nexus 等)

您需要在 CI/CD 管道中添加一个步骤,将

BIGProjectSetup.msi
文件上传到您选择的托管解决方案,然后生成该位置的直接下载 URL。

upload-to-storage:
  stage: deploy
  script:
    - echo "Uploading BIGProjectSetup.msi to storage..."
    # Add your command/script to upload the file and then export the URL
    - export MSI_URL='http://yourstorage.location/BIGProjectSetup.msi'
  artifacts:
    reports:
      dotenv: msi_url.env
  needs:
    - packaging

release-job:
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:latest              
  script:
    - echo "Getting MSI URL"
    - source msi_url.env
    - ASSETS_LINK="{\"name\":\"BIGProjectSetup.msi\",\"url\":\"$MSI_URL\",\"link_type\":\"package\"}"
    - echo "Assets link JSON - $ASSETS_LINK"
    - echo "Creating Release"
    - release-cli create --name "BIGProject" --tag-name "TestRelease" --description "New version of BIGProject" --assets-link "$ASSETS_LINK"
  dependencies:
    - upload-to-storage

upload-to-storage
将负责将 MSI 上传到外部存储解决方案并导出直接下载 URL。
然后,
release-job
使用此 URL 创建一个版本,并直接链接到
BIGProjectSetup.msi

© www.soinside.com 2019 - 2024. All rights reserved.