Como transferir uma variável entre jobs no processo CI/CD?
sobes.tech IA
Resposta da IA
Para transferir variáveis entre jobs num processo CI/CD, geralmente usam-se artefactos ou variáveis de ambiente. Vejamos os métodos típicos:
-
Artefactos: O job anterior guarda o valor da variável num ficheiro, que é declarado como artefacto. O próximo job faz o download deste artefacto e lê o valor do ficheiro. Adequado para grandes volumes de dados ou ficheiros.
# .gitlab-ci.yml (exemplo 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 "O valor da variável é: $MY_VARIABLE" -
Variáveis de ambiente: Alguns sistemas CI/CD permitem definir variáveis de ambiente para jobs subsequentes diretamente a partir do script do job atual.
-
Gitlab CI: Use
artifacts:reports:dotenv.# .gitlab-ci.yml (exemplo com 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 # Garantir que os artefactos sejam carregados script: - echo "O valor da variável é: $MY_VARIABLE" # Variável disponível diretamente -
Jenkins Pipeline: Use funções
stasheunstashpara ficheiros ouenvpara variáveis de ambiente.// Jenkinsfile (exemplo com env) pipeline { agent any stages { stage('Producer') { steps { script { env.MY_VARIABLE = "MY_VARIABLE_VALUE" } echo "Definido MY_VARIABLE no producer: ${env.MY_VARIABLE}" } } stage('Consumer') { steps { echo "Valor no consumer: ${env.MY_VARIABLE}" // Variável disponível } } } }ou com
stash/unstash:// Jenkinsfile (exemplo com 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 "Valor no consumer: ${myVariable}" } } } } }
-
-
APIs específicas de CI/CD: Algumas plataformas oferecem API para guardar e obter variáveis. É um método menos comum para casos padrão.
-
Volume partilhado: Ao executar jobs no mesmo host ou cluster, pode-se usar um volume partilhado para armazenamento temporário de dados.
A escolha do método depende da plataforma CI/CD utilizada, bem como do tipo e volume de dados a transferir. Artefactos e variáveis de ambiente através de mecanismos específicos da plataforma (dotenv, set +e) são os métodos mais comuns e confiáveis.