web-dev-qa-db-fra.com

Echo désactivé dans la sortie de la console Jenkins

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.

50

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

101
Slav

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

enter image description here

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 KEYSTOREenter image description here

1
schnatterer

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/
    '''
  }
}
1
IvanRublev