Команда входа в оболочку не поддерживается в последующем плагине Gradle - PullRequest
0 голосов
/ 04 сентября 2018

Мне нужно использовать подключаемый модуль для док-станции Transmode, чтобы вставить образ докера в репозиторий образов IBM Cloud. Команда push - это стандартная команда docker push, которая выполняется plygin gradle, но перед этим мне нужно выполнить набор команд "ibmcloud login":

task loginToIBMCloud (type: Exec) {
    group = 'docker'
    commandLine '/usr/local/bin/ibmcloud', 'login', '-a', 'https://api.eu-de.bluemix.net', '--apikey', 'MYAPIKEY'
    commandLine '/usr/local/bin/ibmcloud', 'cr', 'login'
    commandLine '/usr/local/bin/ibmcloud', 'cr', 'region-set', 'eu-central'
}

Эта команда работает нормально, но позже, когда я переключаюсь в гужевой режим, я получаю сообщение об ошибке, поскольку команда docker ведет себя так, как предыдущий вход в систему не произошел:

* What went wrong:
Execution failed for task ':buildDockerAndPush'.
> Docker execution failed
  Command line [/usr/local/bin/docker push registry.eu-de.bluemix.net/eliza/tourism/mtp/ms/mtpms_weather:0.0.2b] returned:
  unauthorized: authentication required

Это плагин-задача для сборки и загрузки образа в репозиторий:

task buildDockerAndPush(type: Docker) {
    group = 'docker'
    push = true;
    tagVersion = "${project.version}"
    exposePort(8080)
    addFile {
        from jar
        rename {'app.jar'}
    }
    entryPoint(['java', '-Djava.security.egd=file:/dev/./urandom', '-jar', '/app.jar'])
}

Выполнение одной и той же серии команд в оболочке работает отлично. ibmcloud в порядке, сборка докера в порядке, и загрузка докера в порядке. Образ правильно передается в репозиторий IBM, который позже работает в команде kubectl.

Итак ... как мне сделать так, чтобы имя входа, выполненное в предыдущей задаче Exec в gradle, оставалось действительным во второй задаче.

1 Ответ

0 голосов
/ 04 сентября 2018

Я обнаружил, что команда "ibmcloud cr" может почти полностью заменить команду docker, поэтому замена ее в качестве команды docker в подключаемом модуле эффективно создает образ в IBM Cloud. Даже «push» не требуется, и даже не требуется запуск локального докера. Это не совсем решение, но оно решает первоначальную проблему входа в систему + создания + передачи изображения в IBM Cloud.

Чтобы заменить команду docker, просто сделайте это в вашем скрипте сборки gradle (очевидно, с вашим правильным путем, если он отличается):

docker {
    dockerBinary "/usr/local/bin/ibmcloud rc"
}

И помните, не включая

push = true;

в задаче типа Docker, так как теперь толчок не требуется.

...