Дженкинс: толчок к ECR от раба - PullRequest
0 голосов
/ 09 мая 2018

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

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

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

no basic auth credentials

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

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

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Возможно, вы не согласны с ошибкой, сообщенной в плагине 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
0 голосов
/ 09 мая 2018

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

 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 в подчиненное устройство

...