Jenkins Actions de pipeline

  • Rversion finale: Zurich
  • Mis à jour 31 juil. 2025
  • 15 minutes de lecture
  • Utilisez ces actions dans votre Jenkins pipeline pour interagir avec le modèle de DevOps Config données.

    Important :
    DevOps Config est désormais obsolète et n’est plus pris en charge ni disponible pour une nouvelle activation.

    Jenkins Les piplines scriptées et déclaratives sont prises en charge.

    Ces actions sont fournies pour créer une définition de pipeline spécifique afin d’atteindre votre objectif. Ajoutez une commande à votre Jenkins fichier pour effectuer ces actions.
    • snDevOpsConfig

      Action combinée pour charger, valider et publier les données de configuration.

    • snDevOpsConfigUpload

      Chargez les données de configuration via la tâche de l’agent DevOps Config .

    • snDevOpsConfigGetSnapshots

      Récupérez les instantanés pour un déployable spécifique ou pour tous les déployables impactés.

    • snDevOpsConfigPublish

      Publiez un instantané pour l’application donnée et le déployable.

    • snDevOpsConfigExport

      Exporter un instantané pour une application donnée et un élément déployable.

    • snDevOpsConfigRegisterPipeline

      Liez un ensemble de changements et/ou un instantané à une exécution de pipeline.

    • snDevOpsConfigValidate

      Validez les données de configuration par rapport aux politiques de votre organisation.

    • snDevOpsChange

      Créez une demande de changement avec l’instantané associé joint.

    snDevOpsConfig

    Chargez, validez et publiez les changements de données de configuration en une seule étape.

    Cette action combine les actions snDevOpsConfigUpload, snDevOpsConfigGetSnapshots et snDevOpsConfigRegisterPipeline en une seule action, plutôt que d’avoir à exécuter chaque action séparément.

    Variables d'entrée
    Fichier config Spécifie le fichier de données de configuration à charger vers le composant ou le chemin d’accès déployable dans le modèle de données.
    applicationName Spécifie l’application vers laquelle les données de configuration seront téléchargées.
    target Spécifie la cible du modèle de données vers laquelle les données de configuration seront téléchargées (par exemple, composant, collection, déployable).
    collectionName (Facultatif) Nom de la collection à charger (obligatoire si la cible est une collection).
    deployableName (Facultatif) Nom de l’élément déployable à charger (obligatoire si la cible est déployable).
    namePath

    Spécifie le chemin d’accès au nom dans le modèle de données vers lequel les données de configuration seront téléchargées.

    Remarque :
    Lors du chargement dans un dossier vars, vous devez commencer le chemin du nom par « vars/ » pour spécifier le chemin du dossier variable.
    Format de données Spécifie le format de données du fichier de configuration (par exemple, JSON, YAML,XML, entre autres)
    Validation automatique Indique s’il faut valider ou non les données de configuration après le chargement (vrai/faux). La valeur par défaut est vrai.
    Validation automatique Spécifie s’il faut valider les données de configuration pendant la validation (vrai/faux). La valeur par défaut est vrai.
    Publication automatique Indique s’il faut publier les données de configuration après validation (vrai/faux). La valeur par défaut est vrai.
    changesetNumber

    (Facultatif) Spécifie l’ensemble de changements (ouvert) auquel cette activité de chargement est associée. Si cette option n’est pas fournie, un nouvel ensemble de changements est créé.

    Remarque :
    Utilisé uniquement pour plusieurs scénarios de chargement.
    markFailed (Facultatif) Échouer le pipeline en cas d’échec de la tentative de validation (en raison d’un problème de back-end).
    afficherles résultats (Facultatif) Afficher les résultats de validation dans le journal de la console des Jenkins tâches.
    continueWithLatest (Facultatif) Spécifie s’il faut renvoyer le dernier instantané selon la combinaison applicatioName-deployableName-changesetNumber si aucun instantané n’est généré (vrai/faux). La valeur par défaut est faux.
    Sortie
    • En cas de réussite, un instantané ou un ensemble d’instantanés.
    • En cas d’échec, un message d’échec API/back-end s’affiche.
    Exemple
    • Entrée :
      
      snapshotObj = snDevOpsConfig(
           applicationName: "PaymentDemo",
           configFile: "config/application/Collection/Collection2/*.json",
           target: "collection",
           collectionName: "release-1.0",
           namePath: "settings/infrastructure/database",
           dataFormat: "json",
           autoCommit: 'true',
           autoValidate: 'true',
           autoPublish: 'true',
           continueWithLatest: 'true',
           markFailed: 'true',
           showResults: 'false'
      )
      
      echo"*************************\n ${snapshotObj}"
    • Sortie de réponse Jenkins snDevOpsConfig
    Exemple : collection
    Remarque :
    Lors du chargement dans une collection, l’argument collectionName est requis.
    
    snDevOpsConfig(
         applicationName: 'PaymentDemo',
         target: 'collection',
         collectionName: 'release-1.0',
         namePath: 'web-api-v1.0',
         configFile: 'k8s/helm/*.yml',
         dataFormat: 'yaml',
         autoCommit: 'true',
         autoValidate: 'true',
         autoPublish: 'true'
    )
    Exemple : déployable
    Remarque :
    Lors du chargement vers un déployable, l’argument deployableName est requis.
    
    snDevOpsConfig(
         applicationName: 'PaymentDemo',
         target: 'deployable',
         deployableName: 'Production',
         namePath: 'web-api-v1.0',
         configFile: 'k8s/helm/*.yml',
         dataFormat: 'yaml',
         autoCommit: 'true',
         autoValidate: 'true',
         autoPublish: 'true'
    )
    Plusieurs chargements dans une validation

    Pour charger des données de configuration à partir de différents emplacements, ou pour charger un ensemble de données vers plusieurs cibles (par exemple, un composant, un déployable) suivies comme une validation unique dans votre modèle de données, vous pouvez appeler l’action snDevOpsConfigUpload autant de fois que nécessaire pour le premier ensemble de chargements, puis appeler l’action snDevOpsConfig pour le chargement final.

    Voici un exemple.

    • Lors du premier chargement, créez une variable (par exemple, $changeset) et affectez-lui la valeur de retour de l’étape afin qu’elle puisse être réutilisée dans les chargements suivants.

      Charger 1 : fichier XML dans le composant :
      
      $changeset = snDevOpsConfigUpload(
           applicationName: 'PaymentDemo',
           target: 'component',
           namePath: 'paymentService-v1.0',
           configFile: 'infra/v1/config.xml',
           dataFormat: 'xml',
           autoCommit: 'false',
           autoValidate: 'false',
           autoPublish: 'false'
      )
    • Dans les chargements suivants (et le chargement final), utilisez la variable comme entrée.

      Charger 2 : fichier JSON dans le dossier de variables du déployable :
      
      snDevOpsConfig(
           applicationName: 'PaymentDemo',
           target: 'deployable',
           deployableName: 'Production',
           namePath: 'vars/dbSettings',
           configFile: 'infra/prod/dbConfig.json',
           dataFormat: 'json',
           changesetNumber: ”${changeset}”,
           autoCommit: 'false',
           autoValidate: 'false',
           autoPublish: 'false',
           continueWithLatest: 'true'
      )
    Charger plusieurs formats de données
    Pour charger des données de configuration dans différents formats de fichier, vous pouvez appeler l’action snDevOpsConfig avec ces spécifications.
    • Assurez-vous que l’argument configFile utilise un caractère générique dans le chemin d’accès.
    • Ne spécifiez pas l’argument dataFormat .

    Voici un exemple.

    • Disons que nous avons ces fichiers de configuration.

      Configuration DevOps : fichiers de chargement Jenkins

    • Voici comment charger les fichiers de configuration à l’aide de snDevOpsConfig.
      
      snDevOpsConfig(
           applicationName: 'PaymentDemo',
           target: 'component',
           namePath: 'paymentService-v1.0',
           configFile: 'infra/v1/*',
           autoCommit: 'true',
           autoValidate: 'true',
           autoPublish: 'true'
      )

    snDevOpsConfigUpload

    Cette action charge un fichier de configuration à un emplacement donné dans un modèle de données d’application.

    Il est destiné à être utilisé de manière itérative pour tous les fichiers de configuration à charger dans le modèle de données de l’application pendant l’exécution du pipeline.

    Soutient:
    • Charger vers :
      • Un composant, une collection ou un élément déployable.
      • Dossier de variables (vars) d’un composant, d’une collection ou d’un élément déployable.
    • Modèle regex pour l’entrée du fichier de configuration.
    • Possibilité d’être appelé plusieurs fois dans le même pipeline.
    Variables d'entrée
    Fichier config Spécifie le fichier de données de configuration à charger vers le composant ou le chemin d’accès déployable dans le modèle de données.
    applicationName Spécifie l’application vers laquelle les données de configuration seront téléchargées.
    target Spécifie la cible du modèle de données vers laquelle les données de configuration seront téléchargées (par exemple, composant, collection, déployable).
    collectionName (Facultatif) Nom de la collection à charger (obligatoire si la cible est une collection).
    deployableName Nom de l’élément déployable à charger (obligatoire si la cible est déployable).
    namePath

    Spécifie le chemin d’accès au nom dans le modèle de données vers lequel les données de configuration seront téléchargées.

    Remarque :
    Lors du chargement dans un dossier vars, vous devez commencer le chemin du nom par « vars/ » pour spécifier le chemin du dossier variable.
    Format de données Spécifie le format de données du fichier de configuration (par exemple, JSON, YAML,XML, entre autres)
    convertPath (Facultatif) Indique s’il faut conserver la structure de répertoire des fichiers de configuration (en ce qui concerne l’espace de travail) et convertir le répertoire en chemins d’accès au sein du modèle de données.
    changesetNumber

    (Facultatif) Spécifie l’ensemble de changements (ouvert) auquel cette activité de chargement est associée. Si cette option n’est pas fournie, un nouvel ensemble de changements est créé.

    Remarque :
    Utilisé uniquement pour plusieurs scénarios de chargement.
    Validation automatique Indique s’il faut valider ou non les données de configuration après le chargement (vrai/faux). La valeur par défaut est faux.
    Validation automatique Spécifie s’il faut valider les données de configuration pendant la validation (vrai/faux). La valeur par défaut est faux.
    Variables de sorties
    changesetNumber

    (Facultatif) Spécifie l’ensemble de changements (ouvert) auquel cette activité de chargement est associée.

    Si aucun numéro d’ensemble de changements n’est fourni, un nouvel ensemble de changements est créé.

    Exemple
    • Entrée :

      Voici un exemple de l’action snDevOpsConfigUpload . À titre d’illustration, nous affecterons la réponse à une variable, changeSetId, qui pourrait être répercutée dans le journal de notre console pour les scénarios de débogage.

      
      changeSetId = snDevOpsConfigUpload(
           applicationName: "PaymentDemo",
           target: 'component',
           namePath: "web-api-v1.0",
           configFile: "k8s/helm/values.yml",
           dataFormat: "json",
           autoCommit: 'true',
           autoValidate: 'true'
      )
      
      echo "Changeset: $changeSetId created"
    • Sortie :

      En plus des données chargées dans notre modèle de données dans DevOps Config, la sortie ressemblerait à ceci (en utilisant le module d’extension Blue Ocean pour visualiser la sortie de la console).

      Configuration de Configuration DevOps Charger la sortie

    Exemple : chargements multiples (composant)
    Vous pouvez appeler l’action de chargement plusieurs fois pour charger des données de configuration dans différents formats de fichier à partir de différents emplacements, tout en conservant la partie chargements d’un ensemble de modifications.
    • Lors du premier chargement, nommez l’action afin que la variable de sortie changesetNumber puisse être réutilisée lors des chargements suivants.
      Chargement du fichier YAML :
      
      $changeset = snDevOpsConfigUpload(
           applicationName: 'PaymentDemo',
           target: 'component',
           namePath: 'wep-api-v1.0',
           configFile: 'k8s/helm/values.yml',
           dataFormat: 'yaml',
           autoCommit: 'false',
           autoValidate: 'false'
      )
    • Dans les chargements suivants, référencez la variable de sortie changesetNumber du premier chargement comme variable d’entrée.
      Téléchargement de 3 fichiers JSON :
      
      snDevOpsConfigUpload(
           applicationName: 'PaymentDemo',
           target: 'component',
           namePath: 'wep-api-v1.0',
           configFile: 'infra/*.json',
           dataFormat: 'json',
           autoCommit: 'false',
           autoValidate: 'false',
           changesetNumber: ”${changeset}”
      )
    • Lors de l’appel final, en plus de référencer la variable de sortie changesetNumber du premier chargement en tant que variable d’entrée, définissez autoCommit et autoValidate sur vrai.
      Chargement du fichier INI :
      
      snDevOpsConfigUpload(
           applicationName: 'PaymentDemo',
           target: 'component',
           namePath: 'wep-api-v1.0',
           configFile: 'featureToggles/set1.ini',
           dataFormat: 'ini',
           autoCommit: 'true',
           autoValidate: 'true',
           changesetNumber: ”${changeset}”
      )
    Exemple : chargements multiples (collection et variables)
    Vous pouvez appeler l’action de chargement plusieurs fois pour charger des données de configuration dans différents formats de fichier à partir de différents emplacements, tout en conservant la partie chargements d’un ensemble de modifications.
    • Lors du premier chargement, créez une variable (par exemple, $changeset) et affectez-lui la valeur de retour de l’étape afin qu’elle puisse être réutilisée dans les chargements suivants.
      Chargement du fichier XML :
      
      $changeset = snDevOpsConfigUpload(
           applicationName: 'PaymentDemo',
           target: 'collection',
           collectionName: 'release-v1.0',
           namePath: 'v1-common-configs',
           configFile: 'infra/v1/config.xml',
           dataFormat: 'xml',
           autoCommit: 'false',
           autoValidate: 'false'
      )
    • Dans les chargements suivants, utilisez la variable comme entrée.
      Chargement du fichier JSON :
      
      snDevOpsConfigUpload(
           applicationName: 'PaymentDemo',
           target: 'deployable',
           deployableName: 'Production',
           namePath: 'vars/dbSettings',
           configFile: 'infra/prod/dbConfig.json',
           dataFormat: 'json',
           autoCommit: 'true',
           autoValidate: 'true',
           changesetNumber: ”${changeset}”
      )
    Remarque :
    Pour charger dans un dossier de variables, uploadTarget doit être défini sur deployable, et les valeurs correctes doivent être définies pour deployableName et changesetNumber.

    snDevOpsConfigGetSnapshots

    Cette action est destinée à être utilisée dans différents scénarios :

    • Récupérez tous les instantanés pour tous les déployables impactés.

      Lorsque des fichiers de configuration sont téléchargés dans un modèle de données d’application, le système crée des instantanés pour tous les éléments déployables considérés comme impactés par le chargement. En suivant le flux de CI, en supposant que la validation est activée pour le dernier appel Upload, l’étape suivante consiste à itérer dans la liste des instantanés et à vous assurer qu’ils ont tous passé la validation.

    • Récupérez un instantané spécifique.

      Après le flux de CD, un instantané spécifique est récupéré afin qu’il puisse être publié, puis exporté pour être consommé en aval (par exemple, pour mettre en service une infrastructure ou une application).

    • Récupérez les derniers instantanés pour un déployable d’une application dans le cas où un chargement ne génère aucun instantané.

      Un ensemble de données de configuration est disponible pour le déploiement dans un environnement pour une combinaison application-déployable-ensemble de changements lorsqu’aucun changement de configuration n’est apporté.

    • Affichez les résultats de validation de politique dans une exécution de pipeline.

      Affichez les résultats de validation de politique sous forme de résultats de tests sur la page des résultats des tests de la version Jenkins, y compris Conforme avec exception, lors de l’obtention d’un instantané.

    Définitions d’entrées
    applicationName Spécifie l’application vers laquelle charger les données de configuration ou exporter des données.
    deployableName (Facultatif) Spécifie le déployable pour l’application sur laquelle obtenir les dernières données d’instantané.
    changesetNumber (Facultatif) Spécifie l’ID de l’ensemble de changements pour l’ensemble de changements de configuration qui intéresse l’utilisateur.
    isValidated (Facultatif) Spécifie s’il faut renvoyer uniquement les instantanés qui ont été réussis ou transmis avec une exception (vrai/faux). La valeur par défaut est vrai.
    continueWithLatest (Facultatif) Spécifie s’il faut renvoyer le dernier instantané selon la combinaison applicatioName-deployableName-changesetNumber si aucun instantané n’est généré (vrai/faux). La valeur par défaut est faux.
    Sortie
    • En cas de réussite, un instantané ou un ensemble d’instantanés.
    • En cas d’échec, un message d’échec API/back-end s’affiche.
    Exemple
    • Instantané spécifique (spécifié) :
      
      $snapshots = snDevOpsConfigGetSnapshots(
           applicationName: 'PaymentDemo',
           deployableName: 'Production',
           changesetNumber: 'Chset-16',
           isValidated: 'true',
           continueWithLatest: 'true'
      )
    • Dernier instantané validé (renvoie le dernier instantané pour la combinaison d’application et d’élément déployable) :
      
      $snapshots = snDevOpsConfigGetSnapshots(
           applicationName: 'PaymentDemo',
           deployableName: 'Production',
           isValidated: 'true'
      )
    • Tous les instantanés d’ensemble de changements (renvoie tous les instantanés pour la combinaison d’application et d’élément déployable) :
      
      $snapshots = snDevOpsConfigGetSnapshots(
           applicationName: 'PaymentDemo',
           changesetNumber: 'Chset-16'
      )
    • Affichez les résultats de validation de politique dans une exécution de pipeline.
      1. Affectez une variable au chemin d’accès du fichier qui contient les résultats de validation de l’instantané générés pendant l’action snDevOpsConfigGetSnapshots .
      2. Appelez l’action JUnit pour charger les résultats de validation de l’instantané dans la section de test d’exécution du pipeline.
      
      stage('Validate') {
          steps {
      	script {
                 changeSetResults = snDevOpsConfigGetSnapshots( … )
                 if (!changeSetResults) {
                    echo "No snapshots were created"
                 } else {
      	       def changeSetResultsObject = readJSON text: changeSetResults
      
      	       changeSetResultsObject.each {
                        snapshotName = it.name
                        snapshotObject = it
      	       }
      	       // STEP 1
      		validationResultsPath = "${snapshotName}_${currentBuild.projectName}_${currentBuild.number}.xml"
      	    }
      	}
          }
      }
      
      post {
          always {
              // STEP 2
              junit testResults: "${validationResultsPath}", skipPublishingChecks: true
          }
      }
      

    snDevOpsConfigPublish

    Cette action publie un instantané pour l’application donnée et le déployable. À partir de là, l’instantané peut être consommé via le processus d’exportation.

    Définitions d’entrées
    applicationName Spécifie l’application à partir de laquelle publier les données de configuration.
    deployableName Spécifie le déployable pour l’application à partir de laquelle publier les données de configuration.
    snapshotName Spécifie le nom de l’instantané à publier.
    Sortie
    • En cas de réussite, vrai.
    • Sinon, faux.
    Exemple
    
    snDevOpsConfigPublish(
         applicationName: 'PaymentDemo',
         deployableName: 'Production',
         snapshotName: 'Production-v23.dpl',
    )

    snDevOpsConfigExport

    Cette action exporte un instantané pour l’application donnée et le déployable.

    L’utilisateur doit spécifier l’exportateur, les arguments de l’exportateur pertinents, le format d’exportation (par exemple, YAML, JSON, etc.) et l’emplacement de sortie des données de configuration exportées.

    À partir de là, les données de configuration peuvent être utilisées directement comme entrée pour un outil de déploiement ou de mise en service en aval du pipeline.

    Arguments d'entrée
    applicationName Spécifie l’application à partir de laquelle exporter les données.
    deployableName Spécifie la configuration déployable pour l’application à partir de laquelle exporter des données.
    snapshotName

    (Facultatif) Spécifie l’instantané à partir duquel exporter des données.

    Si aucun instantané n’est spécifié, le dernier instantané du déployable est utilisé.

    exporterName Spécifie l’exportateur à appliquer à l’instantané (par exemple, UniqueCDI).
    exporterArgs (Facultatif) Spécifie les arguments à utiliser avec l’exportateur.
    Format d’exportation Spécifie le format d’exportation des données d’instantané (par exemple, INI, YAML,PROPS).
    fileName

    Spécifie le fichier vers lequel exporter les données (supposé se trouver dans l’espace de travail).

    Si aucun nom de fichier n’est spécifié, une concaténation du nom de l’application et du nom de l’élément déployable (plus l’extension de fichier) est utilisée par défaut.

    Sortie
    • En cas de réussite, vrai.
    • Sinon, faux.
    Exemple
    
    snDevOpsConfigExport(
         applicationName: 'PaymentDemo',
         deployableName: 'Production',
         snapshotName: 'Production-v23.dpl',
         exporterFormat: 'yaml',
         exporterName: 'returnAllData-now',
         exporterArgs: '',
         fileName: 'exported_file-Production-20220302.yml'
    )

    snDevOpsConfigRegisterPipeline

    Cette action lie un ensemble de changements et/ou un instantané au pipeline afin qu’il puisse être suivi pendant l’exécution du pipeline. Dans Vélocité de changement DevOps, ceci est affiché dans l’interface utilisateur du pipeline.

    Pour plus d’informations sur la fonctionnalité Accélération du changement, reportez-vous Accélérer votre DevOps processus de changement à la DevOps section .

    Arguments d'entrée
    applicationName Spécifie le nom de l’application.
    changesetNumber

    (Facultatif) Spécifie l’ensemble de changements à associer à l’exécution du pipeline.

    Remarque :
    Spécifiez soit changesetNumber soit snapshotName, mais pas les deux.
    snapshotName

    (Facultatif) Spécifie le nom de l’instantané à associer à l’exécution du pipeline.

    Remarque :
    Spécifiez soit changesetNumber soit snapshotName, mais pas les deux.
    Sortie
    • En cas de réussite, vrai.
    • Sinon, faux.
    Exemple
    • Entrée :

      Voici un exemple de l’action snDevOpsConfigRegisterPipeline . À titre d’illustration, nous affecterons la réponse à une variable, changeSetRegResult, qui pourrait être répercutée dans notre journal de console pour les scénarios de débogage.

      
      changeSetRegResult = snDevOpsConfigRegisterPipeline(
           applicationName: "PaymentDemo",
           changesetNumber: "Chset-122"
      )
      
      echo "Pipeline registration result: ${changeSetRegResult}"
    • Sortie :

      En plus des données chargées dans notre modèle de données dans DevOps Config, la sortie ressemblerait à ceci (en utilisant le module d’extension Blue Ocean pour visualiser la sortie de la console).

      Configuration DevOps Enregistrer la sortie de pipeline

    snDevOpsConfigValidate

    Validez les données de configuration par rapport aux politiques de votre organisation.

    Arguments d'entrée
    applicationName Application à valider.
    deployableName Déployable pour que l’application soit validée.
    snapshotName (Facultatif) Nom de l’instantané à valider.
    markFailed (Facultatif) Échouer le pipeline en cas d’échec de la tentative de validation (en raison d’un problème de back-end).
    afficherles résultats (Facultatif) Afficher les résultats de validation dans le journal de la console des Jenkins tâches.
    Sortie
    • En cas de réussite, aucune sortie.
    • En cas d’échec, un message d’échec API/back-end s’affiche.
    Exemple
    • Instantané spécifique (spécifié) :
      
      snDevOpsConfigValidate(
           applicationName: 'PaymentDemo',
           deployableName: 'Production',
           snapshotName: 'Production-v23.dpl',
      )
    • Dernier instantané (récupère et valide le dernier instantané pour la combinaison d’application et d’élément déployable) :
      
      $changeset = snDevOpsConfigValidate(
           applicationName: 'PaymentDemo',
           deployableName: 'Production'
      )

    snDevOpsChange

    Créez une demande de changement et joignez un instantané pour référence.

    Pour plus d’informations sur la fonctionnalité Accélération du changement, reportez-vous Accélérer votre DevOps processus de changement à la DevOps section .

    Arguments d'entrée
    applicationName Spécifie le nom de l’application.
    snapshotName Spécifie le nom de l’instantané à associer à la demande de changement.
    Exemple
    
    snDevOpsChange(
         applicationName: 'PaymentDemo',
         snapshotName: 'Production-v23.dpl'
    )

    Exemple de pipeline Jenkins

    
    pipeline {
        environment {
            buildArtifactsPath = "build_artifacts/${currentBuild.number}"
            validationResultsPath = ""
        }
    
        agent any
    
        stages {
            // Initialize pipeline
            stage('Initialize') {
                steps {
                    script {
                        // DevOps Config application related information
                        appName = 'PaymentDemo'
                        deployableName = 'Production'
                        componentName = "web-api-v1.0"
                        collectionName = "release-1.0"
                        // Configuration file information
                        exportFormat = 'yaml'
                        configFilePath = "k8s/helm/values.yml"
                        // Exporter related information
                        exporterName = 'returnAllData-nowPreview' 
                        exporterArgs = ''
                        // Jenkins variables declared to be used in pipeline
                        exportFileName = "${buildArtifactsPath}/export_file-${appName}-${deployableName}-${currentBuild.number}.${exportFormat}"
                        changeSetId = ""
                        snapshotName = ""
                        snapshotObject = ""
                        isSnapshotValidateionRequired = false
                        isSnapshotPublisingRequired = false
                    }
                }
            }
                
            // Validate configuration data changes
            stage('Validate') {
                parallel {
                    stage('Config') {
                        stages('Config Steps') {
                            // Upload configuration data to DevOps Config
                            stage('Upload, Validate, & Publish') {
                                steps {
                                    sh "echo uploading and auto-validating configuration file: ${configFilePath}"
                                    script {
                                        changeSetResults = snDevOpsConfig(
                                            applicationName: "${appName}",
                                            target: 'component',
                                            namePath: "${componentName}",
                                            configFile: "${configFilePath}",
                                            dataFormat: "${configFileFormat}",
                                            autoCommit: 'true',
                                            autoValidate: 'true',
                                            autoPublish: 'true',
                                            isValidated: 'true',
                                            continueWithLatest: 'true',
                                            markFailed: 'true'
                                        )
    
                                        echo "Snapshots generated, validated, and published: ${changeSetResults}"
    
                                        def changeSetResultsObject = readJSON text: changeSetResults
    
                                        changeSetResultsObject.each {
                                            snapshotName = it.name
                                            snapshotObject = it
                                        }
    
                                        validationResultsPath = "${snapshotName}_${currentBuild.projectName}_${currentBuild.number}*.xml"
                                    }
                                }
                            }
                            // Export published snapshot to be used by downstream deployment tools
                            stage('Export') {
                                steps {
                                    script {
                                        // create build artifacts dir to store export file
                                        sh "mkdir -p ${buildArtifactsPath}"
                                        
                                        exportResponse = snDevOpsConfigExport(
                                            applicationName: "${appName}",
                                            snapshotName: "${snapshotObject.name}",
                                            deployableName: "${deployableName}",
                                            exporterFormat: "${exportFormat}",
                                            fileName: "${exportFileName}",
                                            exporterName: "${exporterName}",
                                            exporterArgs: "${exporterArgs}"
                                        )
                                    }
                                }
                            }
                        }
                    }
                }
            }
            
            // Create change request and attach snapshot for reference
            stage('Change Management') {
                steps {
                    script {
                        // Trigger change request
                        snDevOpsChange(
                            applicationName: "${appName}",
                            snapshotName: "${snapshotName}"
                        )
                    }     
                }
            }
        }
        // NOTE: attach snapshot validation results to run (if the snapshot fails validation)
        post {
            always {
                // attach policy validation results
                junit testResults: "${validationResultsPath}", skipPublishingChecks: true
            }
        }
    }