You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI流水线安全文件下载后无法找到问题求助

GitLab CI Docker镜像签名密钥下载后无法访问的问题解决

问题背景

搭建GitLab CI流水线用于创建和签名Docker镜像时,遇到以下问题:

  • 使用download-secure-files工具拉取委托密钥,脚本提示已下载到/var/certs/,但ls命令无法找到该文件
  • 此前将密钥存入变量后用echo写入文件,会丢失换行符导致docker trust不兼容
  • 迁移至gitlab.com后问题仍存在

相关配置:

流水线部署阶段代码

deploy:
  stage: deploy
  image: docker:latest
  services:
    - docker:latest
  variables:
    SECURE_FILES_DOWNLOAD_PATH: '/var/certs'
  only:
    - master
  script:
    - apk update
    - apk add curl
    - apk add bash
    - curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | bash
    - ls -la /var/certs/
    - ls -la .secure_files/
    - echo $SIGNING_KEY_PASSWORD | docker trust key load /var/certs/10505ee4d3913ea70a8d69e19df1a59dc5af99920f9ba4a1b11714b383da4a00.key --name gitlab
    - docker info

GitLab Runner注册命令

sudo gitlab-runner register -n  --url "https://gitlab.com/"  --registration-token TOKEN  --executor docker --description "My Docker Runner"  --docker-image "docker:24.0.5"  --docker-privileged

排查与解决方法

1. 提前创建目标目录并设置权限

docker:latest镜像默认没有/var/certs目录,download-secure-files可能因目录不存在静默失败。在执行installer前先创建目录:

script:
  - apk update && apk add curl bash
  - mkdir -p /var/certs && chmod 755 /var/certs
  - curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | bash
  - ls -la /var/certs/

2. 查看工具执行的详细日志

移除curl的--silent参数,查看download-secure-files的完整输出,确认文件是否真的下载成功:

script:
  - curl "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | bash

若工具存在报错(如权限不足、文件未找到),会直接在日志中显示。

3. 修复变量写入文件的换行符问题

如果需要通过变量存储密钥,用双引号包裹变量保留换行格式:

echo "$SIGNING_KEY" > /var/certs/your-key.key
# 或用printf更可靠
printf "%s" "$SIGNING_KEY" > /var/certs/your-key.key

避免docker trust key load因格式错误失败。

4. 统一Runner与Job的Docker镜像版本

Runner注册时使用docker:24.0.5,但Job用docker:latest,版本不一致可能导致环境差异。修改Job配置:

deploy:
  image: docker:24.0.5
  services:
    - docker:24.0.5-dind  # 使用对应版本的dind镜像

Docker-in-Docker场景需使用带-dind后缀的镜像,确保版本匹配。

5. 核对安全文件的命名

确认上传到GitLab的安全文件名称,与Job中引用的10505ee4d3913ea70a8d69e19df1a59dc5af99920f9ba4a1b11714b383da4a00.key完全一致(Linux环境区分大小写)。

内容的提问来源于stack exchange,提问作者Franz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:09:50