我在管道脚本中遇到了一些语法问题。
我试图在最后一个正斜杠“/”之后和最后一个句号“。”之前捕获所有内容。在此字符串中git@github.com:project / access-server-pd.git(access-server-pd)
Here(下方)是我想要设置的方式
MYVAR="git@github.com:project/access-server-pd.git"
NAME=${MYVAR%.*} # retain the part before the colon
NAME=${NAME##*/} # retain the part after the last slash
echo $NAME
我目前在管道脚本上设置了三重引号:
stage('Git Clone') {
MYVAR="$GIT_REPO"
echo "$MYVAR"
NAME="""${MYVAR%.*}"""
echo "$NAME"
但是我在“。”上收到了意外的令牌。错误。我怎么写这个以便我可以让它工作?
更新:此命令可以解决问题:
echo "git@github.com:project/access-server-pd.git" | sed 's#.*/\([^.]*\).*#\1#'
现在我只需要找到正确的语法来创建一个存储该值的变量。
答案 0 :(得分:4)
在这种情况下,看起来在String
上使用一些Groovy / Java方法可以提取部件。
final beforeColon = url.substring(0, url.indexOf(':')) // git@github.com
final afterLastSlash = url.substring(url.lastIndexOf('/') + 1, url.length()) // project/access-server-pd.git
这使用了几种不同的方法:
public int String.indexOf(String str, int fromIndex)
public String String.substring(int beginIndex, int endIndex)
public int String.length()
public int String.lastIndexOf(String str)
您需要注意管道中使用的代码。如果是沙箱,则它将在受保护的域中运行,其中每个调用都经过安全检查。例如,whitelist中的Script Security Plugin会将上面使用的所有调用列入白名单(例如method java.lang.String lastIndexOf java.lang.String
)。
在您的管道代码中执行String
操作非常合理,因为您可以根据它做出决策并更改您的业务流程。