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

求助:GitHub Actions Services使用私有GAR镜像的认证方法

解决方案:GitHub Actions Services拉取GCP私有Artifact Registry镜像

核心限制说明

GitHub Actions Services 启动时机早于 Job 内的 Steps,因此无法直接在 Services 配置中嵌入 GCP 认证逻辑。必须通过让 Runner 的 Docker 守护进程预先完成 GCP 镜像仓库认证的方式,让 Services 复用该认证拉取私有镜像。


可行方案一:配置Docker凭证助手(推荐)

通过 Steps 完成 GCP 认证后,配置 Docker 使用 gcloud 作为凭证助手,让 Runner 的 Docker 客户端具备拉取私有镜像的权限,Services 启动时会自动复用该权限:

jobs:
  integration-test:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: GCP身份认证
        uses: google-github-actions/auth@v2
        with:
          credentials_json: ${{ secrets.GCP_PREPROD_SA_KEY }}

      - name: 安装并配置gcloud CLI
        uses: google-github-actions/setup-gcloud@v2
        with:
          project_id: ${{ secrets.GCP_PROJECT_ID }} # 替换为你的GCP项目ID

      - name: 配置Docker使用GCP凭证助手
        run: gcloud auth configure-docker <你的Artifact Registry地域>-docker.pkg.dev --quiet
        # 示例:us-central1-docker.pkg.dev

    services:
      # 你的微服务示例
      user-service:
        image: <你的Artifact Registry地域>-docker.pkg.dev/<GCP项目ID>/<仓库名>/user-service:latest
        ports:
          - "8081:8080"
      order-service:
        image: <你的Artifact Registry地域>-docker.pkg.dev/<GCP项目ID>/<仓库名>/order-service:latest
        ports:
          - "8082:8080"

注意事项:

  • 确保你的服务账号(SA)拥有 roles/artifactregistry.reader 角色,具备私有镜像拉取权限;
  • 替换命令和镜像地址中的地域、项目ID、仓库名等占位符;
  • 若仍报错,检查镜像标签是否正确,或尝试手动拉取镜像验证权限。

可行方案二:预拉取镜像到Runner本地

如果方案一无效,可在 Steps 中手动拉取私有镜像到 Runner 本地,Services 直接使用本地镜像启动(无需再次远程拉取):

jobs:
  integration-test:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: GCP身份认证
        uses: google-github-actions/auth@v2
        with:
          credentials_json: ${{ secrets.GCP_PREPROD_SA_KEY }}

      - name: 安装并配置gcloud CLI
        uses: google-github-actions/setup-gcloud@v2
        with:
          project_id: ${{ secrets.GCP_PROJECT_ID }}

      - name: 配置Docker凭证助手
        run: gcloud auth configure-docker <你的Artifact Registry地域>-docker.pkg.dev --quiet

      - name: 预拉取微服务镜像
        run: |
          docker pull <你的Artifact Registry地域>-docker.pkg.dev/<GCP项目ID>/<仓库名>/user-service:latest
          docker pull <你的Artifact Registry地域>-docker.pkg.dev/<GCP项目ID>/<仓库名>/order-service:latest

    services:
      user-service:
        image: <你的Artifact Registry地域>-docker.pkg.dev/<GCP项目ID>/<仓库名>/user-service:latest
        ports:
          - "8081:8080"
      order-service:
        image: <你的Artifact Registry地域>-docker.pkg.dev/<GCP项目ID>/<仓库名>/order-service:latest
        ports:
          - "8082:8080"

备选方案:镜像同步到GitHub Container Registry(GHCR)

若上述方案均无法解决,可将GCP私有镜像同步到GHCR:

  1. 在GCP配置镜像同步规则,将Artifact Registry的镜像自动同步到GHCR;
  2. 在GitHub Actions Services中直接使用GHCR镜像地址,无需额外认证(GitHub Actions默认通过GITHUB_TOKEN具备GHCR私有镜像拉取权限)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:55:09