来自 AWS ECR 的 Jenkins 管道 Docker 代理

Jenkins pipeline Docker agent from AWS ECR

我需要在 Docker 作为代理执行 Jenkins 管道,

Docker 图像位于 AWS ECR,

我如何通过 AWS ECR 授权为代理拉取图像?

根据此页面 https://aws.amazon.com/blogs/compute/authenticating-amazon-ecr-repositories-for-docker-cli-with-credential-helper/ 类似以下内容应该有效:

sh """#!/bin/bash
      docker login -u=${USER} -p=${PASS} https://aws_account_id.dkr.ecr.us-east-1.amazonaws.com
"""

意味着您需要授权令牌才能从 ECR 中提取图像,这意味着您还需要在 Jenkins 服务器上安装 AWS-CLI。最好的方法是在你的管道中分配角色和 运行 下面的命令来获取授权令牌,如果它很复杂然后使用下面的 ECR 插件。

在推送和拉取图像之前 Docker 客户端必须以 AWS 用户身份向 Amazon ECR 注册表进行身份验证。 AWS CLI get-login 命令为您提供身份验证凭据以传递给 Docker。有关详细信息,请参阅 Registry 身份验证。 使用 JENKINS/Amazon+ECR

注意: 要根据 AWS 注册自动创建令牌,或者您可以 运行 在 jenkins 文件中拉取此命令之前

$(aws ecr get-login --no-include-email --region us-west-2)

Go 需要在 Docker 中作为代理执行 Jenkins 管道 更喜欢这个 link.

你可以试试这个:

    agent { 
        docker { 
            label "buildDockerNode"
            image "nodejs10-test-v1"
            alwaysPull true
            registryUrl "*aws_account_id*.dkr.ecr.us-west-2.amazonaws.com/*project*"
            registryCredentialsId "ecr:us-west-2:*cred_id*"
        }
    }
agent {
  docker {
    alwaysPull true
    image '<aws-account-Id>.dkr.ecr.us-west-2.amazonaws.com/<ecr-repo>:<tag>'
    registryUrl 'https://<aws-account-Id>.dkr.ecr.us-west-2.amazonaws.com'
    registryCredentialsId 'ecr:us-west-2:<Jenkins Credential ID>'
  }
}

要在 jenkins 中使用 AWS ECR 存储库中的图像作为代理,您首先需要添加种类凭证 AWS Credentials。 现在只需使用上面的代码在您的管道代码中插入代理块。 确保更换

  1. <aws-account> 与 AWS 账户 ID。

  2. <ecr-repo> 与 ECR 存储库名称

  3. <tag> 带有您要使用的 ECR 图像标签。

  4. <Jenkins Credential ID> 使用在 Jenkins 中保存凭据时获得的 Jenkins 凭据 ID。

  5. us-west-2 替换为你的 ecr 仓库区域

您可以使用 https://<jenkins.url>/directive-generator/ 为您生成此代码。