2017-03-05 12 views
0

私は以下の文字列を持っています:deploy_tagとversion_number。Jenkinsの実行シェル内に文字列に特定の文字が含まれているかどうかをチェックする方法は?

deploy_tagは「2.8.6.1」または「origin/master」にすることができ、version_numberは「1.1.2.3」のようなドットで区切ってのみ数値で表すことができます。

私はそのような何かをしたい:

if [[ $deploy_tag == *["\/"+]* ]]; then deploy_tag=$version_number; fi 

意味します。$ deploy_tagが含まれている場合は、「/」、それはversion_numberは$の値を持つ値です設定。

このシェルスクリプト全体は、Jenkinsジョブ内のシェル実行の一部です。

問題は、私の正規表現に何か問題があるようですが、私は何が見つかりません...あなたはできますか?

私はstackoverflowに関するいくつかの他の質問をチェックしましたが、私の正規表現で問題を見つけることができませんでした。

編集#1: はここにログを構築ジェンキンスからの例です:

[social-portal] $ /bin/sh -xe /tmp/hudson1162745529550311655.sh 
+ [[ origin/master =~/]] 
/tmp/hudson1162745529550311655.sh: 2: /tmp/hudson1162745529550311655.sh: [[: not found 
+ echo deploy: origin/master 
deploy: origin/master 
+ echo version: 2.7.4 
version: 2.7.4 
+ mkdir output 

そして、それは、(デバッグエコーさんを含む)問題を生成するコードです:

if [[ $DEPLOY_TAG =~/]]; then DEPLOY_TAG=$VERSION_NUMBER; fi 
echo deploy: $DEPLOY_TAG 
echo version: $VERSION_NUMBER 

答えて

0

ジェンキンスは/bin/shを使用しています、これはあなたが仮定することはできませんbashです。 /bin/shbashの一部のバージョンへのリンクであっても、一部のbashの機能が正しく動作しないことがあります。 POSIX互換の構造体を使用する必要があります。

case $deploy_tag in 
    */*) deploy_tag=$version_number ;; 
esac 
関連する問題