我有这个脚本:
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
我在这里做错了什么吗?
非常感谢
当您在 GitLab CI/CD 配置中为某个版本创建资产链接时,提供的链接必须直接指向您希望作为可下载资产提供的文件。
但是,GitLab 以特殊方式处理作业工件的链接。即使您在作业的工件存档中指定了指向工件文件的直接链接,单击“发布”部分中的链接也将导致下载整个工件存档(如
artifacts.zip
)而不是单个文件。
GitLab 默认情况下不提供通过“发布”部分直接从工件存档下载单个文件的机制。您提供的 URL 在技术上是正确的,并且指向
BIGProjectSetup.msi
应位于工件存档中的位置。尽管如此,GitLab 不会解析此 URL 来直接提供 BIGProjectSetup.msi
供下载。
作为替代方案,您可以考虑将
BIGProjectSetup.msi
文件托管在 GitLab 作业工件系统的外部。这意味着将文件上传到支持直接下载的其他位置,然后在您的 ASSETS_LINK
配置中使用该 URL。这将包括:
您需要在 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
。