Dado um pipeline de construção do jenkins 2.1, o jenkins injeta uma env
variável no node{}
. Por exemplo, BRANCH_NAME
pode ser acessado com
node {
echo ${env.BRANCH_NAME}
...
Eu quero ecoar todas as env
propriedades dentro do pipeline Jenkins
... considerando que não conheço todas as propriedades com antecedência.
Estou procurando um código como
node {
for(e in env){
echo e + " is " + ${e}
}
...
que ecoaria algo como
BRANCH_NAME is myBranch2
CHANGE_ID is 44
...
jenkins
groovy
jenkins-pipeline
JamesThomasMoon1979
fonte
fonte
env.each { name, value -> println "Name: $name -> Value $value" }
imprimeName: org.jenkinsci.plugins.workflow.cps.EnvActionImpl@45c2d1ee -> Value null
.new ClassName() { ... }
), ele deve funcionar. Ou você o executa em um método marcado@NonCPS
, então os fechamentos funcionarão dentro dele também.Respostas:
Outra forma mais concisa:
cf. https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-script
fonte
sh
combat
eenv
comset
no Windows.De acordo com a documentação do Jenkins para pipeline declarativo :
Para pipeline com script Jenkins :
O item acima também classifica seus env vars por conveniência.
fonte
printenv
é apenas um comando shell que imprime o ambiente, nada específico do Jenkins. Sem argumentos, é equivalente aenv
sem argumentos. Tenho certezash 'printenv | sort'
que funcionará em DCL ou pipeline com script.sh 'printenv | sort'
fato funciona para um pipeline declarativo do Jenkins; fwiwsh 'env | sort'
também funciona (ambos testados no Jenkins versão 2.46.1). Mencionei originalmentesh 'printenv'
porque foi referenciado na documentação oficial do Jenkins.O seguinte funciona:
Observe que provavelmente falhará na primeira execução e exigirá a aprovação de vários métodos interessantes para execução no jenkins sandbox. Isso é feito em "gerenciar aprovação de script jenkins / em processo"
A lista que recebi incluída:
fonte
java.lang.UnsupportedOperationException: each on a CPS-transformed closure is not yet supported
@NonCPS
?Você pode obter o resultado usando
sh
/bat
step ereadFile
:Infelizmente
env.getEnvironment()
retorna um mapa muito limitado de variáveis de ambiente.fonte
sh 'env > env.txt'
funciona bem e inclui variáveis de ambiente criadas pelo processo do shell.env.getEnvironment()
mostra apenas as variáveis de ambiente do conjunto Jenkins que são um subconjunto daquelas vistas nash 'env'
técnica. Além disso, ele precisa da aprovação de segurança do scriptmethod org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction getEnvironment
. Oenv.each { name, value -> println "Name: $name -> Value $value" }
recomendado por @Renato @Jayan apenas imprimeName: org.jenkinsci.plugins.workflow.cps.EnvActionImpl@45c2d1ee -> Value null
.Por que toda essa complexidade?
faz o que você precisa (sob * nix)
fonte
Este é um script rápido que você pode adicionar como um trabalho de pipeline para listar todas as variáveis de ambiente:
Isso listará as variáveis do sistema e do Jenkins.
fonte
Forma multiplataforma de listar todas as variáveis de ambiente:
fonte
Eu uso o plugin Blue Ocean e não gosto que cada entrada de ambiente receba seu próprio bloco. Eu quero um bloco com todas as linhas.
Imprime mal:
Imprime mal:
Imprime bem:
Imprime bem: (como mencionado por @mjfroehlich)
fonte
As respostas acima agora são antiquadas devido à nova sintaxe do pipeline. Abaixo imprime as variáveis de ambiente.
fonte
for
com um fechamento também causará problemas sem uma@NonCPS
anotação.As soluções Groovy puras que lêem a
env
variável global não imprimem todas as variáveis de ambiente (por exemplo, elas estão faltando variáveis doenvironment
bloco, dowithEnv
contexto e a maioria das variáveis específicas da máquina do SO). Usando etapas de shell é possível obter um conjunto mais completo, mas isso requer umnode
contexto, o que nem sempre é desejado.Aqui está uma solução que usa o
getContext
etapa para recuperar e imprimir o conjunto completo de variáveis de ambiente, incluindo parâmetros de pipeline, para o contexto atual.Advertência: não funciona na sandbox Groovy. Você pode usá-lo em uma biblioteca compartilhada confiável.
fonte
se você realmente deseja repetir a
env
lista, faça:fonte
outra maneira de obter exatamente a saída mencionada na pergunta:
Isso pode ser facilmente estendido para construir um mapa com um subconjunto de env vars que correspondem a um critério:
fonte
Suponho que você precise disso na forma de um script, mas se alguém quiser apenas dar uma olhada na GUI do Jenkins, essa lista pode ser encontrada selecionando a seção "Variáveis de ambiente" no menu contextual esquerdo de cada construção Selecionar projeto = > Selecione build => Variáveis de Ambiente
fonte
Achei que esta é a maneira mais fácil:
fonte
Você pode obter todas as variáveis de sua instância jenkins. Basta visitar:
fonte