私は ガイドライン に署名する方法Android apkをJenkinsで使用します。KSTOREPWDおよびKEYPWDでJenkinsジョブをパラメーター化しました。Jenkinsのジョブ構成の一部(ビルド->シェルの実行)は、これらのパラメーターを取得し、環境変数として保存します。
export KSTOREPWD=${KSTOREPWD}
export KEYPWD=${KEYPWD}
...
./gradlew assembleRelease
問題は、ビルドが終了すると、誰でもビルドの「コンソール出力」にアクセスして、入力されたパスワードを確認できることです。その出力の一部:
08:06:57 + export KSTOREPWD=secretStorePwd
08:06:57 + KSTOREPWD=secretStorePwd
08:06:57 + export KEYPWD=secretPwd
08:06:57 + KEYPWD=secretPwd
したがって、export
コマンドからの出力の前にエコーを抑制し、export
コマンドの後にエコーを再度有効にしたいと思います。
デフォルトでは、Jenkinsはset -x
でシェルの実行スクリプトを起動します。これにより、すべてのコマンドがエコーされます
コマンドの前にset +x
と入力すると、その動作を一時的にオーバーライドできます。もちろん、再び表示するにはset -x
が必要です。
ビルドステップの先頭に次を配置することにより、スクリプト全体でこの動作をオーバーライドできます。#!/bin/bash +x
特定の状況(gradleとjenkinsを使用)では、 環境変数のGradleのパターン (ORG_GRADLE_PROJECT_prop)
。その後、Gradleはプロジェクトにprop
propertyを設定します。
あなたの場合、これは次のようになります
そして、あなたはそれをあなたのgradle.properties
このような
signingConfigs {
release {
storeFile file(KEYSTORE)
storePassword KSTOREPWD
keyAlias ALIAS
keyPassword KEYPWD
}
}
ところで-KEYSTORE
に credentials binding plugin を使用することをお勧めします
公式ドキュメント で提案されているように、sh
パラメーターをJenkinsfile
に、より安全な方法で出力なしで記述する方法の例を示します。 set +x
は、 this answer で記述されているように、主な魔法を行います。
シングルクォートにより、シェルは環境変数としてシークレットを展開します。二重引用符は、Groovyによって秘密が補間されるため、安全性が低下する可能性があります。そのため、典型的なオペレーティングシステムプロセスリスト(およびBlue Ocean、および従来のUIのパイプラインステップツリー)は誤って開示します。
node {
withCredentials([string(credentialsId: 'mytoken', variable: 'TOKEN')]) {
sh /* WRONG! */ """
set +x
curl -H 'Token: $TOKEN' https://some.api/
"""
sh /* CORRECT */ '''
set +x
curl -H 'Token: $TOKEN' https://some.api/
'''
}
}