Войдите в ECR в Jenkinsfile, чтобы я мог получить изображение для запуска сборки? - PullRequest
1 голос
/ 30 октября 2019

Ситуация здесь такова, что у нас есть приложение, которое в настоящее время создается на подчиненном устройстве Jenkins с установленной версией определенного узла. Мы хотим стандартизировать среду сборки, и поэтому для этого нужно встроить его в контейнер докера.

Благодаря моему исследованию это определенно представляется возможным . Однако проблема для нас заключается в том, что мы хотим использовать собственные изображения, которыми мы сами управляем, и храним их в ECR. Мы не хотим использовать их на док-хабе. Имея это в виду, я пытаюсь пройти аутентификацию в нашем ECR в моем Jenkinsfile. В идеале я мог бы сделать что-то вроде этого:

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'
            }
        }
    }
}

Но проблема здесь в том, что наш вход в систему ECR основан на запуске команды оболочки на работнике Jenkins (на котором установлена ​​aws cli) для входа в систему и доступа к образу. ,До сих пор мне не повезло, аутентификация в Jenkinsfile, так что я могу получить изображение для запуска сборки. Кто-нибудь знает, возможно ли это, и если да, как отредактировать Jenkinsfile, чтобы сделать это?

1 Ответ

1 голос
/ 30 октября 2019

Вам нужен токен авторизации перед извлечением образа из ECR, это значит, что вам также нужно установить AWS-CLI на сервере Jenkins. Наилучший подход - назначить роль и выполнить указанную ниже команду где-нибудь в вашем конвейере, чтобы получить токен авторизации, если вам это кажется сложным, вы можете использовать плагин ECR ниже.

Ваш клиент Docker должен пройти аутентификацию в реестрах Amazon ECR как пользователь AWS, прежде чем он сможет отправлять и извлекать изображения. Команда get-login интерфейса командной строки AWS предоставляет вам учетные данные для передачи в Docker. Для получения дополнительной информации см. Аутентификация реестра.

AmazonECR-registry_auth

Таким образом, вы можете использовать JENKINS / Amazon + ECR enter image description here

Плагин Amazon ECR реализует производителя Docker Token для преобразования учетных данных Amazon в API Jenkins, который используется (в основном) всеми подключаемыми модулями Docker. Спасибо этому производителю, вы можете выбрать свои существующие зарегистрированные учетные данные Amazon для различных операций Docker в Jenkins, например, с помощью плагина сборки и публикации CloudBees Docker:

Обычно мы используем эту команду для получения токена.

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

с помощью линии можно попробовать

pipeline
{
    options
    {
        buildDiscarder(logRotator(numToKeepStr: '3'))
    }

    agent any
    environment 
    {
        PROJECT = 'tap_sample'
        ECRURL = 'http://999999999999.dkr.ecr.eu-central-1.amazonaws.com'
        ECRCRED = 'ecr:eu-central-1:tap_ecr'
    }
    stages
    {
        stage('Docker image pull')
        {
            steps
            {
                script
                {
                    sh("eval \$(aws ecr get-login --no-include-email | sed 's|https://||')")
                    docker.withRegistry(ECRURL, ECRCRED)
                    {
                        docker.image(PROJECT).pull()
                    }
                }
            }
        }
    }
}
...