Sobes.tech
Middle

Hogyan lehet változót átvinni a CI/CD folyamatban a feladatok között?

sobes.tech MI

Válasz az MI-től

A CI/CD folyamatban a változók közötti átadás általában artefaktumokat vagy környezeti változókat használ. Nézzük meg a tipikus módszereket:

  1. Artefaktumok: Az előző feladat egy változó értékét fájlban tárolja, amely artefaktumként van megjelölve. A következő feladat letölti ezt az artefaktumot, és olvassa az értéket a fájlból. Ez alkalmas nagy adatmennyiség vagy fájlok esetén.

    # .gitlab-ci.yml (Gitlab CI példa)
    job_producer:
      stage: build
      script:
        - echo "MY_VARIABLE_VALUE" > variable.txt
      artifacts:
        paths:
          - variable.txt
    
    job_consumer:
      stage: deploy
      dependencies:
        - job_producer
      script:
        - MY_VARIABLE=$(cat variable.txt)
        - echo "A változó értéke: $MY_VARIABLE"
    
  2. Környezeti változók: Néhány CI/CD rendszer lehetővé teszi, hogy a jelenlegi feladat szkriptjéből közvetlenül beállítsuk a következő feladatok környezeti változóit.

    • Gitlab CI: Használja az artifacts:reports:dotenv-t.

      # .gitlab-ci.yml (dotenv példával)
      job_producer:
        stage: build
        script:
          - echo "MY_VARIABLE=MY_VARIABLE_VALUE" > variables.env
        artifacts:
          reports:
            dotenv: variables.env
      
      job_consumer:
        stage: deploy
        needs:
          - job: job_producer
            artifacts: true # Győződjön meg arról, hogy az artefaktumok betöltődtek
        script:
          - echo "A változó értéke: $MY_VARIABLE" # A változó közvetlenül elérhető
      
    • Jenkins Pipeline: Használja a stash és unstash funkciókat fájlokhoz vagy az env-t környezeti változókhoz.

      // Jenkinsfile (példa env-vel)
      pipeline {
          agent any
          stages {
              stage('Producer') {
                  steps {
                      script {
                          env.MY_VARIABLE = "MY_VARIABLE_VALUE"
                      }
                      echo "A MY_VARIABLE beállítva a producerben: ${env.MY_VARIABLE}"
                  }
              }
              stage('Consumer') {
                  steps {
                      echo "Az érték a fogyasztónál: ${env.MY_VARIABLE}" // A változó elérhető
                  }
              }
          }
      }
      

      vagy a stash/unstash-szal:

      // Jenkinsfile (stash/unstash példa)
      pipeline {
          agent any
          stages {
              stage('Producer') {
                  steps {
                      sh 'echo "MY_VARIABLE_VALUE" > variable.txt'
                      stash name: 'variable_file', includes: 'variable.txt'
                  }
              }
              stage('Consumer') {
                  steps {
                      unstash 'variable_file'
                      script {
                         def myVariable = readFile 'variable.txt'
                         echo "Az érték a fogyasztónál: ${myVariable}"
                      }
                  }
              }
          }
      }
      
  3. CI/CD-specifikus API-k: Néhány platform API-t kínál a változók mentésére és lekérésére. Ez kevésbé elterjedt a szokásos esetekben.

  4. Megosztott kötet: Ha a feladatok ugyanazon a gépen vagy klaszteren futnak, akkor ideiglenes adatok tárolására megosztott kötetet lehet használni.

A módszer kiválasztása a használt CI/CD platformtól, az átadott adatok típusától és mennyiségétől függ. Az artefaktumok és a környezeti változók a platform speciális mechanizmusain keresztül (dotenv, set +e) a legelterjedtebb és legmegbízhatóbb megközelítések.