Sobes.tech
Middle

Ako preniesť premennú medzi úlohami v procese CI/CD?

sobes.tech AI

Odpoveď od AI

V procese CI/CD sa zvyčajne používajú artefakty alebo premenné prostredia na prenos premenných medzi úlohami. Pozrime sa na typické metódy:

  1. Artefakty: Predchádzajúca úloha uloží hodnotu premennej do súboru, ktorý je označený ako artefakt. Nasledujúca úloha tento artefakt stiahne a prečíta hodnotu zo súboru. Vhodné pre veľké objemy dát alebo súbory.

    # .gitlab-ci.yml (príklad Gitlab CI)
    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 "Hodnota premennej je: $MY_VARIABLE"
    
  2. Premenné prostredia: Niektoré systémy CI/CD umožňujú priamo zo skriptu aktuálnej úlohy nastaviť premenne prostredia pre nasledujúce úlohy.

    • Gitlab CI: Použite artifacts:reports:dotenv.

      # .gitlab-ci.yml (príklad s dotenv)
      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 # Uistite sa, že artefakty sú načítané
        script:
          - echo "Hodnota premennej je: $MY_VARIABLE" # Premenná je priamo dostupná
      
    • Jenkins Pipeline: Použite funkcie stash a unstash pre súbory alebo env pre premenne prostredia.

      // Jenkinsfile (príklad s env)
      pipeline {
          agent any
          stages {
              stage('Producer') {
                  steps {
                      script {
                          env.MY_VARIABLE = "MY_VARIABLE_VALUE"
                      }
                      echo "Nastavené MY_VARIABLE v producerovi: ${env.MY_VARIABLE}"
                  }
              }
              stage('Consumer') {
                  steps {
                      echo "Hodnota v consumerovi: ${env.MY_VARIABLE}" // Premenná je dostupná
                  }
              }
          }
      }
      

      alebo s stash/unstash:

      // Jenkinsfile (príklad s stash/unstash)
      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 "Hodnota v consumerovi: ${myVariable}"
                      }
                  }
              }
          }
      }
      
  3. API špecifické pre CI/CD: Niektoré platformy poskytujú API na ukladanie a získavanie premenných. Toto je menej bežné pre štandardné prípady.

  4. Zdieľaný objem: Ak úlohy bežia na rovnakom hostiteľovi alebo klastre, môže sa použiť zdieľaný objem na dočasné uloženie dát.

Výber metódy závisí od platformy CI/CD, ktorú používate, typu a objemu prenášaných dát. Artefakty a premenné prostredia cez špeciálne mechanizmy platformy (dotenv, set +e) sú najrozšírenejšie a najspoľahlivejšie prístupy.