passando variáveis ​​entre arquivos groovy


9

Estou gerenciando muitos trabalhos no Jenkins pelo plugin DSL. Esse plug-in está usando definições .groovy, então acho que mesmo se alguém não usar Jenkins, mas usar groovy, poderá ajudar.

Geralmente, quero criar um arquivo adicional, que pode ser um arquivo groovy, JSON ou YAML, qualquer que seja. É importante a possibilidade de conectar esse arquivo ao meu arquivo .groovy.

Nesse arquivo, estou definindo variáveis ​​(em vez de apenas cadeias), por exemplo, endereço IP ou outras coisas, por exemplo.

ip_gitlab: 1.2.3.4
default_user: admin

Nos meus arquivos groovy, quero poder usar essas variáveis.

Essa abordagem é possível no groovy?


claro que isso é possível. Por exemplo, há groovy-lang.org/json.html .
smelm

Se for possível definir caminho de classe adicional no plug-in DSL. em seguida, coloque na pasta que você irá adicionar aos arquivos de caminho de classe como o groovy class GLOBAL{ def a=111; def b=222; }. em seguida, no código que você deve ser capaz de acessá-loGLOBAL.a
Daggett

@daggett eu estava tentando como você escreveu e sempre que eu tenho de erro: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'org.codehaus.groovy.runtime.InvokerHelper$1@641eff69' with class 'org.codehaus.groovy.runtime.InvokerHelper$1' to class 'javaposse.jobdsl.dsl.JobParent' Este erro ocorre durante o processamento da sua classe GLOBAL
rafal1337

Eu esqueci . para cada variável definida, deve haver staticprefixo. class GLOBAL{ static def a=111; static def b=222; }. mas o erro que você tem é estranho. você pode mostrar a variável que declarou e como usá-la no dsl.
daggett

1. Minha configuração do dsl postimg.cc/TLHK5k6h 2. erro durante o processamento dsl postimg.cc/21F37jDs
rafal1337

Respostas:


3

Sugiro usar um arquivo de propriedades como @JBaruch escreveu

ip_gitlab=1.2.3.4
default_user=admin

E carregue

Properties properties = new Properties()
File propertiesFile = new File('test.properties')
propertiesFile.withInputStream {
    properties.load(it)
}

Então você pode usá-lo, obtenha ip por exemplo:

def ipPropertyName= 'ip_gitlab'
properties."$ipPropertyName"

2
Esta é uma cópia minimamente atribuída da outra postagem; você desejaria pelo menos seguir as diretrizes de referência e nomear o autor.
Martijn Pieters

Unfornetly que não funciona em Jenkins DSL, não pode encontrar o arquivo com propriedades, mas este arquivo é a mesma pasta ...FATAL: test.properties (No such file or directory) java.io.FileNotFoundException: test.properties (No such file or directory)
rafal1337

@ rafal1337 Você tentou usar o caminho parcial / completo do arquivo?
user7294900

@ user7294900 Sim, estava tentando vários caminhos, mas sem efeito positivo.
rafal1337


2

Crie um arquivo groovy e defina algumas informações gerais e use load.

Por exemplo, hello.conf (escrito por groovy)

build_name = 'hello'

build_config = [
    'git': 'your git repository',
    'build_job': ['bulid_a', 'build_b']
]

E use-o load

load 'hello.conf'

println(build_name)
for (job in build_config['build_job']) {
    build job: job
}

parece bom, mas no plugin DSL em Jenkins não funciona:ERROR: (pipeline.groovy, line 1) No signature of method: pipeline.load() is applicable for argument types: (java.lang.String) values: [a_test.groovy]Possible solutions: job(java.lang.String), find(), folder(java.lang.String), job(java.lang.String, groovy.lang.Closure), find(groovy.lang.Closure), wait()
rafal1337

2

se você quiser uma resposta específica do Jenkins: Existe um plug-in de provedor de arquivos de configuração - para o jenkins.

Você pode armazenar arquivos de configuração / propriedades por meio de arquivos gerenciados. Vá para Gerenciar Jenkins> Arquivos gerenciados e crie um novo arquivo. Ele suporta .groovy, .json, .xml e muitos outros.

Depois disso, você poderá carregar o arquivo em um trabalho usando a caixa de seleção Fornecer arquivo de configuração, que carregará o arquivo em uma variável env automaticamente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.