小编典典

在詹金斯管道上提取字符串的一部分

jenkins

我在管道脚本中的语法有些麻烦。

我正在尝试捕获最后一个斜杠“/”之后和最后一个句号“”之前的所有内容。在此字符串git@github.com:project / access-server-pd.git(access-server-pd)

这是我下面要设置的方式

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#'

现在,我只需要找到适当的语法来创建一个变量来存储该值。


阅读 289

收藏
2020-07-25

共1个答案

小编典典

在这种情况下,看起来可以使用一些Groovy / Java方法String提取零件。

final beforeColon = url.substring(0, url.indexOf(':'))  // git@github.com
final afterLastSlash = url.substring(url.lastIndexOf('/') + 1, url.length()) // project/access-server-pd.git

这使用了几种不同的方法:

您确实需要注意在管道中使用的代码。如果是沙盒,它将在受保护的域中运行,在该域中,所有调用都经过安全检查。例如,在白名单中的
脚本安全插件

白名单的所有上面使用(例如,电话method java.lang.String lastIndexOf java.lang.String)。

String在管道代码中执行操纵是完全合理的,因为您可能会做出决策并根据其更改编排。

2020-07-25