2017-09-25 4 views
2

Ceci est une partie de mon code de pipeline Jenkins pour déclencher la construction après avoir défini certains paramètres, je mets ces variables env à partir du maître et des branches aussi bien. Je sais que mon maître et mes branches peuvent déclencher des constructions indépendamment (simultanément).jenkins variable d'environnement est partagée entre branche et maître ou pas?

Est-il possible qu'ils (branche build et master build) partagent cette variable env exposée par Jenkins? Ou ils ont leur propre copie de variable d'environnement?

// determine current quadrant using system time 
    def quadrant = getCurrentQuadrant() 
    env.TRIGGER_TYPE=getTriggerType() 
    echo "Current quadrant: " + quadrant + " | triggertype: " + env.TRIGGER_TYPE 
    env.ENV = "${environment}" 

//if the build is triggered by timer in first/fourth quarter of 24 hrs day then change default trigger<dev> to <staging> 
if ((quadrant == 0 || quadrant == 3) && env.TRIGGER_TYPE =='Started by timer') { 
    env.ENV = "staging" 
} 

Répondre

1

Il y a des variables d'environnement qui sont partagés: "Working with the Environment": les JENKINS_URL et d'autres

Les règles sont les suivantes:

  • Une directive de l'environnement utilisé dans le haut niveau Le bloc pipeline s'appliquera à toutes les étapes du pipeline.
  • Une directive d'environnement définie au sein d'une étape appliquera uniquement les variables d'environnement données aux étapes de la scène.

Donc, si vos étapes impliquent des branches multiples, ils partageront les mêmes variables d'environnement.
Mais si ces branches sont utilisées indépendamment, dans une exécution séparée du même travail de pipeline, ce n'est pas le cas.
Une alternative serait d'utiliser parameters pour les valeurs spécifiques à l'exécution.

Vous pouvez trouver another approach in this gist:

stage('Deploy application') { 
    // This is the cool part where you deploy. Here, you can specify builds you want to deploy 
    switch (env.BRANCH_NAME) { 
     case "master": 
      sh("env >> .env") 
      sh("docker run --env-file .env --rm ${project} ./gradlew clean build assembleRelease crashlyticsUploadDistributionRelease") 
      sh("rm -rf .env") 
      break 
     case "dev": 
      sh("env >> .env") 
      sh("docker run --env-file .env --rm ${project} ./gradlew clean build assembleDebug crashlyticsUploadDistributionDebug") 
      sh("rm -rf .env") 
      break 
    } 
} 

Exécuter un pipeline Jenkins dans un docker avec --env-file .env permettrait une accumulation de partager un ensemble de variables stockées dans .env.

+0

Voir aussi http://codegist.net/search/jenkinsfile-build-parameters/6 et https://issues.jenkins-ci.org/browse/JENKINS-41748 – VonC