詹金斯:从奴隶推到ECR

时间:2018-05-09 13:23:20

标签: docker jenkins jenkins-plugins cloudbees amazon-ecr

我正在使用spotify的maven插件构建一个docker容器,然后尝试推送到ecr。

在使用Build and Publish插件登录后,使用cloudbees Amazon ECR插件会发生这种情况。

这就像詹妮丝大师的魅力。 但是对于奴隶我得到了:

no basic auth credentials

Build step 'Docker Build and Publish' marked build as failure

从奴隶手中推出ECR插件的范围还是我错过了什么?

3 个答案:

答案 0 :(得分:1)

这里的答案对我的管道不起作用。我发现这个解决方案有效,而且很干净:

withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', accessKeyVariable: 'AWS_ACCESS_KEY_ID', credentialsId: 'myCreds', secretKeyVariable: 'AWS_SECRET_ACCESS_KEY']]) {
    
    sh '''
    aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${REGISTRY}

    ..
    '''
}

此解决方案不需要 aws cli v2。

答案 1 :(得分:0)

你没有奴隶证书,这就是你遇到的问题。我解决了这个问题,在按需从属服务器上运行的每个管道中注入此凭据。

 withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', accessKeyVariable: 'AWS_ACCESS_KEY_ID', credentialsId: 'AWS_EC2_key', secretKeyVariable: 'AWS_SECRET_ACCESS_KEY']]) {
                    sh "aws configure set aws_access_key_id ${AWS_ACCESS_KEY_ID}"
                    sh "aws configure set aws_secret_access_key ${AWS_SECRET_ACCESS_KEY}"
                    sh '$(aws ecr get-login --no-include-email --region eu-central-1)'


                sh "docker push ${your_ec2_repo}/${di_name}:image_name${newVersion}"

当然你需要在奴隶

中安装aws-cli

答案 2 :(得分:0)

您可能会在此处的ECR插件中报告错误:https://issues.jenkins-ci.org/browse/JENKINS-44143

该主题中的各个人描述的症状略有不同,但常见的主题是docker未能使用ECR插件正确生成的auth详细信息。

我发现在我的情况下,这是因为ECR插件保存到一个docker配置,而docker-commons插件(处理docker API的实际工作)正在从另一个读取。 Docker在早期版本中更改了配置格式和位置,导致冲突。

插件作者提供了一种解决方法,基本上只是首先核对两个配置文件:

node {
        //cleanup current user docker credentials
        sh 'rm  ~/.dockercfg || true'
        sh 'rm ~/.docker/config.json || true'

        //configure registry
        docker.withRegistry('https://ID.ecr.eu-west-1.amazonaws.com', 'ecr:eu-west-1:86c8f5ec-1ce1-4e94-80c2-18e23bbd724a') {

            //build image
            def customImage = docker.build("my-image:${env.BUILD_ID}")

            //push image
            customImage.push()
}

您可能希望纯粹将其作为调试步骤和快速修复(如果有效,您可以确信这个错误是您的问题)。

我的永久修复是简单地使用合理的默认值手动创建新样式的dockercfg,然后将环境变量设置为指向它。

我在我的Dockerfile中做了这个,它创建了我的Jenkins实例:

RUN mkdir -p $JENKINS_HOME/.docker/ && \
    echo '{"auths":{}}' > $JENKINS_HOME/.docker/config.json
ENV DOCKER_CONFIG $JENKINS_HOME/.docker