пометка образов докера с помощью параметра конвейера Jenkins - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь пометить свой док-контейнер тегами или versions.Я пытаюсь использовать для этого Дженкинса, объявив строковый параметр.

В файле docker-compose.yml мое изображение выглядит так:

image: api:"${version}"

Я получаю сообщение об ошибке, говорящее о том, что тег неверен.

В моем конвейере Jenkins есть строковый параметр с именем version со значением по умолчанию LASTEST.Однако я хочу иметь возможность ввести v1 или v2, и это тег, который использует контейнер.

Оператор end - это возможность выполнять развертывание сине-зеленого цвета.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Вы можете установить VERSION в среде для сборки, используя withEnv в своем конвейере, например:

# Jenkinsfile
---
stage('build'){
    node('vagrant'){
        withEnv([
           'VERSION=0.1'
        ]){
            git_checkout()
            dir('app'){
                ansiColor('xterm') {
                    sh 'mvn clean install'
                }
            }
            // build docker image with version
            sh 'docker build --rm -t app:${VERSION} .'
        }
    }
}

def git_checkout(){
    checkout([
        $class: 'GitSCM',
        branches: [[name: '*/' + env.BRANCH_NAME]],
        doGenerateSubmoduleConfigurations: false,
        extensions: [
            [$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules: false, reference: '', trackingSubmodules: true],
            [$class: 'AuthorInChangelog'],
            [$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false]
        ],
        submoduleCfg: [],
        userRemoteConfigs: [
            [credentialsId: '...', url: 'ssh://vagrant@ubuntu18/usr/local/repos/app.git']
        ]
    ])
}
# Dockerfile
---
FROM ubuntu:18.04

RUN apt update && \
    apt install -y openjdk-11-jre && \
    apt clean

COPY app/special-security/target/special-security.jar /bin

ENTRYPOINT ["java", "-jar", "/bin/special-security.jar"]

Используется номер версии, установленный в среде сборки Jenkins.по команде docker build.

Jenkins console output

Примечание : приложение java, которое я создаю с maven(например, mvn clean install) исключительно для примера, код доступен https://stackoverflow.com/a/54450290/1423507. Кроме того, для цветного вывода в консоли Jenkins требуется Плагин AnsiColor , как объяснено https://stackoverflow.com/a/53227633/1423507. Наконец,не используя docker-compose в этом примере, нет никакой разницы для установки версии в среде.

0 голосов
/ 01 февраля 2019

Проблема

В моем конвейере Jenkins у меня есть строковый параметр с именем version со значением по умолчанию LASTEST.Однако я хочу иметь возможность ввести v1 или v2, и это тег, который использует контейнер.

Если предположить, что docker compose выполняется внутри вашего конвейера Jenkins, то ${version} you use in docker-compose.yml`должен быть доступен в среде оболочки конвейера Jenkins, в противном случае ничего не получится, что приведет к ошибке, сообщающей, что тег недействителен.

Решение

Извините, но я не знаком сДженкинс, так что я не могу сказать, как правильно установить значение для ${version} в среде оболочки, поэтому вам нужно выполнить поиск по этому поводу.

Совет

Так же, каксовет docker-compose.yml, вы можете использовать расширение bash для назначения значений по умолчанию для переменных, которые вы используете, например:

image: api:"${version:-latest}"

или если вы хотите явную ошибку

image: api:"${version? Mipssing version for docker image!!!}"
...