2017-03-06 5 views
0

私はJenkinsパイプラインスクリプトを持っています。その中にエイリアシングは何の効果もありません

、この作品:

sh("/my/path/to/git status") 

をしかし、私がしようとした場合:

sh("alias git='/my/path/to/git' && git status") 

OR

sh("alias git='/my/path/to/git'") 
sh("git status") 

をこれらが動作しません:script.sh: line 2: git: command not found

私はしたいと思う2番目と3番目のコードを同様に動作させます。どうやってやるの?

答えて

1

連続したshコールが状態(環境変数を含む)を保持することは認められていません。

sh """ 
    alias git='/my/path/to/git' 
    git status 
""" 

いずれかで、そのまたは使用をプロジェクト内のスクリプトを作成し、単一shの命令でそれを呼び出します

1

これらの行

sh("alias git='/my/path/to/git'") 
sh("git status") 

がサブシェルを作成します。最初にエイリアスが作成され、すぐに終了します。 2番目のシェルは、前のシェルまたはそのエイリアスを知らなくても起動します。

以前のバージョン

sh("alias git='/my/path/to/git' && git status") 

&&;に置き換えた場合であっても、いずれかの局所的なインタラクティブシェルでは動作しません - はっきりエイリアスは、単に現在のコマンドリストの最後まで有効になりません。 。

エイリアスを使用する必要がある場合は、シェルを起動するときに、シェルファイル(.bashrc.profileなど)のソースにエイリアスを追加する必要があります。しかし、あなたがshopt -s expand_aliases以外の場合、エイリアスは非対話型シェルでは展開できないことに注意してください。

それ以外の場合は、$PATH/my/path/toを追加するだけです。

関連する問題