Дженкинс: толчок к ECR от раба

Я создаю докер-контейнер с плагином spotify maven и пытаюсь потом нажать ecr.

Это происходит с помощью плагина Cloudbees Build and Publish после входа в систему с помощью плагина Amazon ECR.

Это работает как заклинание на мастере Дженкинса. Но на раб я получаю

no basic auth credentials

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

Выталкивается от рабов из области применения ECR-плагина или я что-то упустил?

3 ответа

Решение

Возможно, вы не согласны с ошибкой, о которой сообщалось в плагине ECR, здесь: https://issues.jenkins-ci.org/browse/JENKINS-44143

Разные люди в этой теме описывают немного разные симптомы, но общая тема заключается в том, что докер не смог использовать детали аутентификации, которые были правильно сгенерированы плагином ECR.

Я обнаружил, что в моем случае это было связано с тем, что плагин ECR сохранялся в одной конфигурации докера, а плагин docker-commons (который обрабатывает фактическую работу 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

Ответы здесь не сработали для моего конвейера. Я считаю, что это решение работает, а также чисто:

      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.

У вас нет полномочий в подчиненном, это проблема, которую вы имеете. Я исправляю эту проблему, вводя эти учетные данные в каждый конвейер, который работает в ведомых подчиненных.

 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 в ведомом

Другие вопросы по тегам