Мне нужно использовать подключаемый модуль для док-станции 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, оставалось действительным во второй задаче.