Je suis ligne directrice comment signer Android apk avec Jenkins. J'ai paramétré le travail Jenkins avec KSTOREPWD et KEYPWD. Un élément de la configuration du travail de Jenkins (Build-> Exécuter Shell) doit prendre ces paramètres et les stocker en tant que variables d’environnement:
export KSTOREPWD=${KSTOREPWD}
export KEYPWD=${KEYPWD}
...
./gradlew assembleRelease
Le problème est que lorsque la construction est terminée, tout le monde peut accéder à la construction "Sortie de la console" et voir quels mots de passe ont été entrés; une partie de cette sortie:
08:06:57 + export KSTOREPWD=secretStorePwd
08:06:57 + KSTOREPWD=secretStorePwd
08:06:57 + export KEYPWD=secretPwd
08:06:57 + KEYPWD=secretPwd
Je voudrais donc supprimer l’écho avant la sortie des commandes export
et réactiver l’écho après les commandes export
.
Par défaut, Jenkins lance le script Execute Shell avec set -x
. Cela provoque l'écho de toutes les commandes
Vous pouvez taper set +x
avant toute commande permettant de remplacer temporairement ce comportement. Bien sûr, vous aurez besoin de set -x
pour recommencer à les montrer.
Vous pouvez remplacer ce comportement pour l'ensemble du script en plaçant ce qui suit en haut de l'étape de génération:#!/bin/bash +x
Dans votre situation spécifique (en utilisant gradle et jenkins), vous pouvez également utiliser un paramètre de mot de passe, en utilisant le motif de Gradle pour les variables d'environnement (ORG_GRADLE_PROJECT_prop)
. Gradle définira ensuite une propriété prop
sur votre projet.
Dans votre cas, cela ressemblerait à quelque chose comme ça
Et vous pouvez l'utiliser dans votre gradle.properties
comme ça
signingConfigs {
release {
storeFile file(KEYSTORE)
storePassword KSTOREPWD
keyAlias ALIAS
keyPassword KEYPWD
}
}
BTW - Je recommande d'utiliser le plugin de liaison des informations d'identification pour KEYSTORE
Voici un exemple de comment écrire le paramètre sh
dans Jenkinsfile
sans sortie de manière plus sécurisée, comme suggéré dans documentation officielle . Le set +x
fait la magie principale comme il est écrit dans cette réponse .
Les guillemets simples feront que le secret sera développé par le shell en tant que variable d'environnement. Les guillemets doubles sont potentiellement moins sécurisés, car Groovy interpole le secret. Par conséquent, les processus de processus typiques du système d'exploitation (ainsi que Blue Ocean et l'arborescence des étapes du pipeline dans l'interface utilisateur classique) le divulgueront accidentellement:
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/
'''
}
}