Ans*_*rth 5 amazon-web-services jenkins docker jenkins-pipeline aws-ecr
这里的情况是我们有一个应用程序,该应用程序当前正在 Jenkins slave 上构建,并在其上安装了特定版本的节点。我们想要标准化构建环境,因此想要在 docker 容器中构建。
通过我的研究,这绝对是可能的。然而,我们面临的挑战是我们想要使用我们自己管理并存储在 ECR 中的自定义图像。我们不想使用 docker hub 上的那些。考虑到这一限制,我正在努力在我的 Jenkinsfile 中对我们的 ECR 进行身份验证。理想情况下,我可以做这样的事情:
pipeline {
agent {
docker {
image 'node:7'
registryUrl 'ecr_url.amazonaws.com'
registryCredentialsId 'ecr:us-east-1:iam_role'
}
}
stages {
stage('Build') {
steps {
sh 'command goes here'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这里的问题是,我们的 ECR 登录依赖于在 Jenkins 工作器(安装了 aws cli)上运行 shell 命令来登录并访问图像。到目前为止,我还没有在 Jenkinsfile 中进行身份验证,所以我可以提取一个图像来运行构建。有谁知道这是否可能,如果是,如何编辑 Jenkinsfile 来做到这一点?
在从 ECR 提取映像之前,您需要授权令牌,这意味着您还需要在 Jenkins 服务器上安装 AWS-CLI。最好的方法是分配角色并在管道中的某个位置运行以下命令来获取授权令牌,如果这对您来说很复杂,您可以使用下面的 ECR 插件。
\n\n\n\n\n\n\n您的 Docker 客户端必须以 AWS 用户身份向 Amazon ECR 注册表进行身份验证,然后才能推送和拉取映像。AWS CLI get-login 命令为您提供要传递给 Docker 的身份验证凭证。有关详细信息,请参阅注册表身份验证。
\n
所以你可以使用JENKINS/Amazon+ECR \n
\n\n\nAmazon ECR 插件实现了 Docker 令牌生成器,以将 Amazon\n 凭证转换为(大多数)所有与 Docker 相关的\n 插件使用的 Jenkins\xe2\x80\x99 API。感谢这位制作人,您可以为 Jenkins 中的各种 Docker 操作选择现有的已注册 Amazon 凭证,例如使用 CloudBees Docker 构建和发布插件:
\n
通常我们使用这个命令来获取token。
\n\n$(aws ecr get-login --no-include-email --region us-west-2)\n
Run Code Online (Sandbox Code Playgroud)\n\n在管道中你可以尝试
\n\npipeline\n{\n options\n {\n buildDiscarder(logRotator(numToKeepStr: \'3\'))\n }\n\n agent any\n environment \n {\n PROJECT = \'tap_sample\'\n ECRURL = \'http://999999999999.dkr.ecr.eu-central-1.amazonaws.com\'\n ECRCRED = \'ecr:eu-central-1:tap_ecr\'\n }\n stages\n {\n stage(\'Docker image pull\')\n {\n steps\n {\n script\n {\n sh("eval \\$(aws ecr get-login --no-include-email | sed \'s|https://||\')")\n docker.withRegistry(ECRURL, ECRCRED)\n {\n docker.image(PROJECT).pull()\n }\n }\n }\n }\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
7205 次 |
最近记录: |