1
votes

Comment passer la variable Python au travail en aval dans le pipeline

J'ai un flux comme ci-dessous dans un pipeline.

```python build.py```

J'exécute un script python dans la tâche de construction en tant que script d'exécution par lots.

    stage('Build') {
                    build job: 'Build'
    }

    stage('Run') {
                  build job: 'Run', parameters: [string(name: 'build_version', value: <to get from Build job>)]
    }

"build.py" aura une variable "build_version". Je veux le transmettre à jenkins Job "Build" et le retourner au pipeline et le transmettre à "Run" job à partir du pipeline.

Comment puis-je faire cela?


1 commentaires

J'ai essayé de définir cette valeur comme variable d'environnement en utilisant un appel de sous-processus "commande setx". Mais je n'ai pas pu trouver cette variabkle d'environnement de jenkins.


3 Réponses :


0
votes

Voici une solution possible.

def build_version = bat(script: '/path/to/python /path/to/build.py', returnStdout: true)

Et le script python devrait écrire dans STDOUT la valeur que vous voulez assigner à $ build_version


0 commentaires

0
votes

Notez que chaque shell (étape sh de votre pipeline) ouvre un nouveau shell, sans connaître le précédent. Si vous souhaitez rendre vos variables shell visibles, vous devez exporter la variable.

Comme remarque ici, ce que je fais normalement dans ces cas, ce n'est pas d'exporter des variables (vous aurez besoin de l'obtenir à partir de l'environnement en python), mais de "créer" un fichier python contenant toutes les variables nécessaires. Plus tard, votre script build.py l'importera.

Pour injecter la variable d'environnement dans ce fichier python d'environnement, vous pouvez utiliser des commandes shell (par exemple cat ou type , selon votre système d'exploitation) ou utiliser des fonctions groovy (voir < a href = "https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#writefile-write-file-to-workspace" rel = "nofollow noreferrer"> writeFile )


0 commentaires

0
votes

Je ne suis pas sûr que ce soit la solution efficace. Mais la méthode ci-dessous fonctionne pour moi.

À partir du script python, je crée un fichier de propriétés avec les valeurs dont j'ai besoin pour l'étape suivante. et en utilisant le plugin EnvInject pour le pousser vers les variables d'environnement de la construction, puis avec la méthode "rawBuild.getEnvironment ()" dans le pipeline, je l'obtiens. Exemple de code:

    def param_val = ""
    stage("Build"){
        def build_var = build job: 'Build'
        param_val = build_var.rawBuild.getEnvironment()[<Variable name you defined>]
     }
    stage("Run") {
         build job: 'Run', parameters: [string(name: '<param>', value: param_val)
    }


0 commentaires