親愛なるstackoverflowコミュニティ、もう一度私はあなたに目を向けます:)
私は最近、Gitlabとその非常に素晴らしいバンドルされたCI/CDソリューションの不思議に遭遇しました。それは勇敢に機能しますが、私たち全員がバイナリに署名する必要があり、私はこれを行うためにJenkinsサーバーにキーをアップロードする方法を見つけられませんでした。
では、リリースをビルドするときに、キーとシークレットをチェックインせずに、Android(実際にはひらめく)アプリケーションに署名する方法を教えてください。
私が見るところによると、ほとんどの人は、ローカルのkeystore.jksを指定する、コミットされていないkey.propertiesファイルを参照する署名設定でビルドジョブを定義しています。これは、APKをローカルでビルドするときにうまく機能しますが、CI/CDジョブの一部としてAPKをビルドしてアーカイブしたい場合は、どうすればよいですか?
秘密鍵(たとえば、キーストア自体へのパスワード)の場合、保護された変数として実際のキーストアファイル自体を保存するだけでよいことがわかりました。それについて私は何ができますか?
どんなアイデアや提案も大歓迎です。乾杯
通常、キーストアファイル(base64文字列として)、エイリアス、およびパスワードをGitlabのシークレット変数に格納します。
.gitlab-ci.ymlで次のようにします。
create_property_files:
stage: prepare
only:
- master
script:
- echo $KEYSTORE | base64 -d > my.keystore
- echo "keystorePath=my.keystore" > signing.properties
- echo "keystorePassword=$KEYSTORE_PASSWORD" >> signing.properties
- echo "keyAlias=$ALIAS" >> signing.properties
- echo "keyPassword=$KEY_PASSWORD" >> signing.properties
artifacts:
paths:
- my.keystore
- signing.properties
expire_in: 10 mins
そして最後に、ビルドグラドルで:
signingConfigs {
release {
file("../signing.properties").with { propFile ->
if (propFile.canRead()) {
def properties = new Properties()
properties.load(new FileInputStream(propFile))
storeFile file(properties['keystorePath'])
storePassword properties['keystorePassword']
keyAlias properties['keyAlias']
keyPassword properties['keyPassword']
} else {
println 'Unable to read signing.properties'
}
}
}
}
私は過去に git-secret を使用して、パスワードで保護された秘密ファイルをチェックインしました。次に secret/protected environment variable を介してパスワードを渡し(既にご存じのとおり)、. gitlab-ci.ymlを変更してパスワードを使用し、ファイルを開いて使用します。