在jenkins管道上提取字符串的一部分

时间:2018-04-25 18:42:58

标签: shell jenkins substring jenkins-pipeline

我在管道脚本中遇到了一些语法问题。

我试图在最后一个正斜杠“/”之后和最后一个句号“。”之前捕获所有内容。在此字符串中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#'

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

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

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

您需要注意管道中使用的代码。如果是沙箱,则它将在受保护的域中运行,其中每个调用都经过安全检查。例如,whitelist中的Script Security Plugin会将上面使用的所有调用列入白名单(例如method java.lang.String lastIndexOf java.lang.String)。

在您的管道代码中执行String操作非常合理,因为您可以根据它做出决策并更改您的业务流程。