web-dev-qa-db-ja.com

androidのGitlab CIで署名キーストアを管理する方法

親愛なるstackoverflowコミュニティ、もう一度私はあなたに目を向けます:)

私は最近、Gitlabとその非常に素晴らしいバンドルされたCI/CDソリューションの不思議に遭遇しました。それは勇敢に機能しますが、私たち全員がバイナリに署名する必要があり、私はこれを行うためにJenkinsサーバーにキーをアップロードする方法を見つけられませんでした。

では、リリースをビルドするときに、キーとシークレットをチェックインせずに、Android(実際にはひらめく)アプリケーションに署名する方法を教えてください。

私が見るところによると、ほとんどの人は、ローカルのkeystore.jksを指定する、コミットされていないkey.propertiesファイルを参照する署名設定でビルドジョブを定義しています。これは、APKをローカルでビルドするときにうまく機能しますが、CI/CDジョブの一部としてAPKをビルドしてアーカイブしたい場合は、どうすればよいですか?

秘密鍵(たとえば、キーストア自体へのパスワード)の場合、保護された変数として実際のキーストアファイル自体を保存するだけでよいことがわかりました。それについて私は何ができますか?

どんなアイデアや提案も大歓迎です。乾杯

12
Almund

通常、キーストアファイル(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'
            }
        }
    }
}
6
IvanP

私は過去に git-secret を使用して、パスワードで保護された秘密ファイルをチェックインしました。次に secret/protected environment variable を介してパスワードを渡し(既にご存じのとおり)、. gitlab-ci.ymlを変更してパスワードを使用し、ファイルを開いて使用します。

1
mmccabe