web-dev-qa-db-fra.com

Comment gérer le magasin de clés de signature dans Gitlab CI pour android

Chère communauté stackoverflow, encore une fois je me tourne vers vous :)

J'ai récemment rencontré la merveille de Gitlab et de leur très belle solution CI/CD groupée. Cela fonctionne galamment cependant, nous devons tous signer nos binaires non et je n'ai trouvé aucun moyen de télécharger une clé comme je le ferais sur un serveur Jenkins pour ce faire.

Alors, comment puis-je, sans vérifier mes clés et mes secrets, signer mon Android (en fait flutter) application lors de la création d'une version?

D'après ce que je vois, la plupart des gens définissent le travail de génération avec des paramètres de signature faisant référence à un fichier key.properties non validé spécifiant un keystore.jks local. Cela fonctionne bien lorsque vous créez des APK localement, mais si je souhaite les créer et les archiver dans le cadre du travail CI/CD, comment dois-je procéder?

Pour les clés secrètes, par exemple les mots de passe du magasin de clés lui-même, j'ai constaté que je peux simplement les stocker en tant que variables protégées, mais le fichier de magasin de clés lui-même. Que puis-je faire à ce sujet?

Toutes les idées, suggestions sont les bienvenues. À votre santé

12
Almund

Habituellement, je stocke le fichier de clés (sous forme de chaîne base64), l'alias et les mots de passe dans les variables secrètes de Gitlab.

Dans le .gitlab-ci.yml, faites quelque chose comme:

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

Et, enfin, dans votre gradle de construction:

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

J'ai utilisé git-secret dans le passé pour enregistrer des fichiers secrets protégés par mot de passe. Ensuite, passez le mot de passe via une variable d'environnement secrète/protégée (comme vous le savez déjà) et modifiez le .gitlab-ci.yml pour utiliser le mot de passe pour ouvrir les fichiers et les utiliser.

1
mmccabe