我正在尝试从 groovy 脚本中的注册表 URL 获取图像和标签名称,但想在单个命令中完成此操作,这可能吗?
类似这样的事情
def registry_url = 'klp.lab.eu.org:1234/repo_list/EU/node:1.1-alpine'
def (image, tag) = registry_url.split( ':' )
应该给我
klp.lab.eu.org:1234/repo_list/EU/node
和 1.1-alpine
我知道
tokenize
并且可以使用 registry_url.tokenize( ':' )[-1]
检索标签值,但我不确定如何提取图像名称。
在这种情况下,查找运算符比
split
更容易使用(“.”是贪婪的,所以你得到最后一个冒号):
def registry_url = 'klp.lab.eu.org:1234/repo_list/EU/node:1.1-alpine'
def (_, image, tag) = (registry_url =~ '(.*):(.*)')[0]
assert image == 'klp.lab.eu.org:1234/repo_list/EU/node'
assert tag == '1.1-alpine'
另一种方法是使用
lastIndexOf
(使用 Groovy 4 范围语法):
def registry_url = 'klp.lab.eu.org:1234/repo_list/EU/node:1.1-alpine'
def lastColon = registry_url.lastIndexOf(':')
def (image, tag) = registry_url.with{ [it[0..<lastColon], it[lastColon<..-1]] }
如果你愿意,你可以坚持
split
:
def registry_url = 'klp.lab.eu.org:1234/repo_list/EU/node:1.1-alpine'
def parts = registry_url.split(':')
def (image, tag) = parts.with{ [it[0..-2].join(':'), it[-1]] }