web-dev-qa-db-fra.com

Comment récupérer les paramètres de build Jenkins à l'aide de l'API Groovy?

J'ai un travail paramétré qui utilise le plugin Perforce et je souhaite récupérer les paramètres/propriétés de construction ainsi que la propriété p4.change définie par le plugin Perforce.

Comment récupérer ces propriétés avec l'API Jenkins Groovy?

29
Noel Yap

Concernant les paramètres:

Voir d'abord cette réponse . Pour obtenir une liste de toutes les versions d'un projet (obtenues selon cette réponse):

project.builds

Lorsque vous trouvez votre build particulier, vous devez obtenir toutes les actions de type ParametersAction avec build.getActions(hudson.model.ParametersAction) . Vous interrogez ensuite l'objet renvoyé pour vos paramètres spécifiques.

Concernant p4.change: je soupçonne qu'il est également stocké en tant qu'action. Dans la console Jenkins Groovy, obtenez toutes les actions pour une build qui contient p4.change et examinez-les - cela vous donnera une idée de ce qu'il faut rechercher dans votre code.

17
malenkiy_scot

Veuillez noter que la page officielle Jenkins Wiki couvre également cela plus en détail: https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+System+Groovy+script La partie saillante est reproduite au dessous de:

// get parameters
def parameters = build?.actions.find{ it instanceof ParametersAction }?.parameters
parameters.each {
   println "parameter ${it.name}:"
   println it.dump()
}

// ... or if you want the parameter by name ...
def hardcoded_param = "FOOBAR"
def resolver = build.buildVariableResolver
def hardcoded_param_value = resolver.resolve(hardcoded_param)
25
Patrice M.

Pour résoudre un seul paramètre (je suppose ce qui est le plus souvent nécessaire), c'est le plus simple que j'ai trouvé:

build.buildVariableResolver.resolve ("myparameter")

dans votre étape de génération de script Groovy System.

24
inger

Je viens de faire fonctionner cela, donc spécifiquement, en utilisant le plugin Groovy Postbuild, vous pouvez faire ce qui suit:

def paramText
def actionList = manager.build.getActions(hudson.model.ParametersAction)
if (actionList.size() != 0)
{
  def pA = actionList.get(0)
  paramText = pA.createVariableResolver(manager.build).resolve("MY_PARAM_NAME")
}
10
Dan

Dans les cas où un nom de paramètre ne peut pas être codé en dur, j'ai trouvé que ce serait le moyen le plus simple et le meilleur d'accéder aux paramètres:

def myParam = env.getProperty(dynamicParamName)

Dans les cas, lorsqu'un nom de paramètre est connu et peut être codé en dur, les 3 lignes suivantes sont équivalentes:

def myParam = env.getProperty("myParamName")
def myParam = env.myParamName
def myParam = myParamName
3
ATrubka

Obtenez tous les paramètres:

System.getenv().each{
  println it
}

Ou plus sophistiqué:

def myvariables = getBinding().getVariables()
for (v in myvariables) {
   echo "${v} " + myvariables.get(v)
}

Vous devrez désactiver "Utiliser Groovy Sandbox" pour les deux.

2
Atais

Pour obtenir les paramètres de construction paramétrés à partir de la construction actuelle à partir de votre GroovyScript (à l'aide de Pipeline), tout ce que vous devez faire est: Supposons que vous disposiez d'une variable appelée VARNAME.

def myVariable = env.VARNAME

1
XP84

Si vous essayez de faire passer tous les paramètres au travail Jenkins, vous pouvez utiliser la variable globale params dans votre pipeline groovy pour le récupérer.

http: // jenkins_Host: 8080/pipeline-syntax/globals

params

Expose tous les paramètres définis dans la génération sous la forme d'une carte en lecture seule avec des valeurs de types différents. Exemple:

if (params.BOOLEAN_PARAM_NAME) {doSomething ()} ou pour fournir une valeur par défaut non triviale:

if (params.get ('BOOLEAN_PARAM_NAME', true)) {doSomething ()} Remarque pour l'utilisation multibranch (Jenkinsfile): l'étape des propriétés vous permet de définir les propriétés du travail, mais celles-ci prennent effet lorsque l'étape est exécutée, tandis que les définitions de paramètres de construction sont généralement consultés avant le début de la construction. Par commodité, tous les paramètres actuellement définis dans le travail qui ont des valeurs par défaut seront également répertoriés dans cette carte. Cela vous permet d'écrire, par exemple:

propriétés ([paramètres ([chaîne (nom: 'BRANCH', valeur par défaut: 'master')])]) git url: '…', branch: params.BRANCH et soyez assuré que la branche master sera vérifiée même dans le version initiale d'un projet de branche, ou si la version précédente ne spécifiait pas de paramètres ou utilisait un nom de paramètre différent.

Utilisez quelque chose comme ci-dessous.

def dumpParameter()
{
  params.each {
    println it.key + " = " + it.value
  }
}
0
Krishnom