如何解决在时髦的jenkins pipline中跨多个sh调用持久化shell
我在Jenkins管道中有两个常规功能,它们一起登录到ECR存储库并构建了一个docker容器。看起来像这样:
def login() {
sh "aws ecr get-login --registry-ids <id> --region <region> --no-include-email"
sh "aws ecr get-login --region <region> --no-include-email"
}
def build(project,tag) {
login()
sh "docker build -t ${project}:${tag} ."
}
但是,当我运行此命令时,我得到pull access denied
,好像从未登录过。我推测这是因为aws ecr登录命令在其自己的shell中运行,而build命令在另一个shell中运行。理想情况下,我想利用这种功能分解和groovy的其他功能,但是要在一个进程/ shell中运行shell命令。这可能吗?我该怎么做?
解决方法
这里的问题是aws ecr get-login
returns a string包含用于登录注册表的命令。您需要执行该命令的结果,方法是将命令的输出分配给变量,然后执行该结果,如下所示:
def login() {
loginRegistry = sh (script: "aws ecr get-login --registry-ids <id> --region <region> --no-include-email",returnStdout: true)
sh loginRegistry
loginRegion = sh (script: "aws ecr get-login --region <region> --no-include-email",returnStdout: true)
sh loginRegion
}
def build(project,tag) {
login()
sh "docker build -t ${project}:${tag} ."
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。