Shell登录命令在以后的gradle插件中不受支持

问题描述 投票:0回答:1

我需要使用Transmode docker gradle插件将docker镜像推送到IBM Cloud映像存储库。 push命令是标准的docker push,由gradle plygin执行,但在此之前我需要执行“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'
}

这个命令工作正常,但是后来当我gradle做推送时,我得到一个错误,因为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'])
}

在shell中执行相同的命令系列是完美的。 ibm云没关系,docker build正常,docker push就可以了。该映像已正确推送到IBM存储库,该存储库稍后可在kubectl命令中运行。

那么......如何在gradle中的先前Exec任务中执行登录仍然在第二个任务中有效。

docker gradle ibm-cloud gradle-plugin
1个回答
0
投票

我发现“ibmcloud cr”命令几乎可以完全取代docker命令,因此在gradle插件中将其替换为docker命令可以有效地在IBM Cloud中构建映像。甚至不需要“推”,甚至不需要本地泊坞机运行。这不完全是解决方案,但解决了登录+创建+将图像推送到IBM Cloud的原始问题。

要替换docker命令,只需在gradle构建脚本中执行此操作(如果不同,显然可以使用正确的路径):

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

并记住不包括

push = true;

在Docker类型任务中,因为现在不需要推送。

© www.soinside.com 2019 - 2024. All rights reserved.