gradleでは、現在のブランチ名とコミット番号を接尾辞としてversionNameに追加したいと思います。なぜなら、私がJockkinsでHockeyAppをリリースするためにアプリケーションをビルドすると、そのアプリケーションがビルドされたブランチ&がコミットしていることを示すのが便利なのです。)プロンプトまたはAndroidでgitブランチ名を取得しています。gradle:ジェンキンスでHEADを返します。
これをコマンドプロンプトに入力すると、返さ:
git rev-parse --abbrev-ref HEAD
同じことが、私はthis答えのいずれかのコードを使用して、AndroidのGradleの中でこのラインを使用するときに発生、またはのGradleのコードのこの部分に示すように:
def getVersionNameSuffix = { ->
def branch = new ByteArrayOutputStream()
exec {
// The command line to request the current branch:
commandLine 'git', 'rev-parse', '--abbrev-ref', 'HEAD'
standardOutput = branch
}
println "My current branch: " + branch
def versionNameSuffix = "-" + branch
// ... some other suffix additions ...
return versionNameSuffix
}
buildTypes {
debug {
applicationIdSuffix ".test"
versionNameSuffix getVersionNameSuffix()
}
}
ログ結果として得られる(これは正確に私が望むもの):
"私の現在のブランチ:機能/ MyFeature" しかし
、私はジェンキンスジョブで私のアプリを構築し、それの出力は以下となり異なる結果:
「私の現在のブランチ:HEAD "
なぜ、Jenkinsで現在のブランチ名を正しく取得するのはなぜですか?
編集:私はまた、ジェンキンスに、ほとんどの場合、正しくbranchNameを返す異なるアプローチを、使用してきました
:プロンプトで
git name-rev --name-only HEAD
出力例:
ジェンキンスで「私の現在の支店:機能/ MyFeature」
出力例:
"私の現在のブランチ:リモコン/起源/機能/ MyFeature"
私が好きならそれは大丈夫ですので、私は、 "リモコン/起源/" を削除することができます!
しかし、この方法では、異なる問題が発生します(プロンプト、gradle、Jenkinsの両方)。私が最後にコミットタグ付けされている場合は、支店名を出力しませんが、この:
"私の現在のブランチ:タグ/ mytagという^ 0"
EDIT 2:
第3のアプローチは、hereです。
答えの下にコメントを含めると、私はgrep *を使用して、プロンプトでブランチを取得できます。しかし、私はgradleコードでバックスラッシュを使うことはできません。これは失敗します:
commandLine 'git', 'branch', '|', 'grep', '\\*'
アドバイスはありますか?
私が使用できる 'ENVを'。 build.gradleでは使用できますが、env.BRANCH_NAMEは使用できません。 JenkinsFileのenv.BRANCH_NAMEにアクセスできるので、パイプラインやJenkinsジョブのパラメータとして使用できますが、それが役に立たないと思います。私はbuild.gradleでそれが必要です。 –
"$ System.env.BRANCH_NAME"を試してください – Amityo
これはうまくいきません。アプリケーション(またはモバイル)モジュールのbuild.gradleでそのコマンドを使用できましたか?もしそうなら、あなたはそれをどこで定義しましたか? –