0

簡単なシェルスクリプトの質問. BB でのパイプラインのセットアップと、移植中のジョブの 1 つは、いくつかの grunt コマンドを使用して、bower のバージョンをインクリメントすることです。これを個別のジョブに分割して、パッケージをバンプし、リポジトリにコミットするため、自動実行されないようにしました。だから私がやろうとしているのは、タスクが開始され、git log コマンドを実行し、最後のコミット メッセージを確認し、事前定義されたメッセージと一致する場合は終了することです。それ以外の場合は続行します。最新の git コミット メッセージを確認し、bash で if else チェックを実行するにはどうすればよいですか?

#! /bin/bash

git log -1

if git log -1 === "pre-defined message";
  then
    echo "already pushed and bumped exiting"
    exit 1
  else
    echo "not bumped -- continuing job"
    ./setup-git.sh
fi
4

2 に答える 2

1

メッセージが既に受信されている場合、npm のインストールを実行しないように別のシェル スクリプトをセットアップする必要がありますが、パイプラインから必要なものを満たすと思われるソリューションを見つけました。

#! /bin/bash

MESSAGE=$(git log -1 HEAD --pretty=format:%s)

if [[ "$MESSAGE" == "This goes into next release" ]]; then
    echo "already pushed run grunt and exit"
    grunt build
    echo "nothing to see here -- move along"
else
    echo "not bumped -- continuing job"
    git config --global user.email "user@user.com"
    git config --global user.name "Blah Blah"
    git remote set-url origin https://user:password@bitbucket.org/myawesomegitrepo.git
    grunt releaseme
    git config --global push.default matching
    git commit dist/destro -m "This goes into next release"
    git push --tags
fi

このスレッドでの彼の回答に対する James Nine の功績: How to capture a git commit message and run an action

于 2016-11-15T06:15:51.157 に答える
1

あなたがやろうとしているのは、ビルドやその他のステップを引き起こす特定のコミットを無視することだと私は信じています....そして、これは手動ビルド環境ではうまくいくかもしれませんが、標準のビルドツールは問題になるでしょう.

私はジェンキンスでこれに苦労しました.ビルドの一部として使用および変更されたサポートファイルは、リポジトリにコミットされたときにビルドをトリガーし、ビルドサイクルが終わることはありません.

私の解決策は、リポジトリを 1 つのディレクトリのソースに分割し、サポート ファイルを別のディレクトリに分割してから、Jenkins の除外領域を追加して、ビルドによって生成されたコミットが次のポーリングで何もしないようにすることでした (ファイルがコミットされたため)ビルド中の実際のプロジェクトとは何の関係もありません)。少し鈍いですが、うまくいくようです。

それがあなたの求めていたものではない場合は、実際に質問してください。

于 2016-11-15T02:24:09.400 に答える