JenkinsパイプラインをAndroidアプリケーションのコードとして記述しています。
次の文字列があります。
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
次のようなartifact_nameという別の変数を定義したいと思います。
product_name-BUILDFLAV(in lowercase)-BUILDTYPE(in lowercase).apk
例えば:
App01-staging-debug.apk
私はgroovyに慣れていないので、正しくやっているかどうかはわかりません。
2つの変数を定義しました。
aa = BUILDFLAV[0].toLowerCase()+BUILDFLAV.substring(1)
bb = BUILDTYPE[0].toLowerCase()+BUILDTYPE.substring(1)
これにより、各文字列の最初の文字を大文字から小文字に変更できます。
次に、artifact_name変数を次のようにします。
App01-$(aa}-${bb}.apk
だから私はそのようなことを試しました:
artifact_name = "App01-${BUILDFLAV[0]}.toLowerCase()+${BUILDFLAV}.substring(1)+${BUILDTYPE[0]}.toLowerCase()+${BUILDTYPE}.substring(1).apk"
しかし、それは私にエラーを投げます。
しかし、これを行うことはうまくいきましたが、それを行うよりエレガントな方法があるようです:
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
aa = BUILDFLAV[0].toLowerCase()+BUILDFLAV.substring(1)
bb = BUILDTYPE[0].toLowerCase()+BUILDTYPE.substring(1)
ARTIFACT_NAME = "App01-${aa}-${bb}.apk"
なぜ最初から小文字で変数を設定しないのかと自問しているのは、ビルドで実行されるgradleタスクが最初の文字の大文字の規則を使用していて、私が達成しようとしていることがより高度なステップに関連しているためですビルドの。
Vars "aa"と "bb"で実行したことを1行で実行しても同じ結果を得ることができますか?上記の例と同様にartifact_name ...
Groovyの文字列でテンプレートを使用する場合は、すでに行ったように、テンプレートを_${..}
_内に配置できます。ただし、実行する必要があるすべてのものをその中に配置する必要があります。
だから使う
_ARTIFACT_NAME = "App01-${BUILDFLAV[0].toLowerCase()}${BUILDFLAV.substring(1).toLowerCase()-${BUILDTYPE[0].toLowerCase()}${BUILDTYPE.substring(1).toLowerCase()}.apk"`
_
ただし、最初の文字を小文字にキャストしてから残りを追加する必要がないことに注意してください。次は同じ結果になります
_`ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"`
_
何らかの理由でとにかくそのようにしたい場合は、BUILDTYPE.substring(1)
の代わりに_BUILDTYPE[1..-1]
_を使用できます。
一般的なレベルでこれを行う方法を知りたいと思っている人のために Rikの答え を説明するための馬鹿げた/異なる方法:
Evaluated Groovy script
_フィールドで、_%
_のように_%Var%
_でラップされた変数を実際の値で次のテキストブロックに置き換えます。def map = [%New_Var%: %Old_Var%.toUpperCase()]
_return map
_
その後、次のようにLinuxで機能していることを確認できます:_echo $New_Var
_
Windowsの場合:_echo %New_Var%
_
例として、
Label
というパラメータがあり、Hello
に設定したとします。
def map = [ucase_Label: Label.toUpperCase()]
_return map
_
_echo $ucase_Label
_
HELLO
そして、値を追加/追加する必要がある場合は、次のようなことができます:def map = [newString: "some_String"+Label.toUpperCase()]