JPNagarajan
JPNagarajan

Reputation: 928

How to get the payload information from jfrog webhook trigger on jenkins

I'm setting up a jenkins job which will be triggered whenever a artifact is deployed in jfrog. I have followed the steps present in the below documentation and i was able to trigger the job.But unfortunately, I'm not able to get the variables values.I'm not sure how to see the payload which we are receiving on the jenkins side to pull the required variables.

https://www.eficode.com/blog/triggering-jenkins-pipelines-on-artifactory-events

My pipeline:

pipeline {
    agent any
    
    triggers {
        GenericTrigger(
            genericVariables: [
                [key: 'ARTIFACT_NAME', value: '$.artifactory.webhook.data.name'],
                [event: 'EVENT_NAME', value: '$.artifactory.webhook.event']
            ],
            causeString: 'Triggered on $ARTIFACT_NAME'
        )
    }

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

Jenkins job logs:

java.lang.NullPointerException: Variable name
    at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:204)
    at org.jenkinsci.plugins.gwt.GenericVariable.<init>(GenericVariable.java:31)
Caused: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedConstructorAccessor6020.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:330)
Caused: java.lang.IllegalArgumentException: Could not instantiate {event=EVENT_NAME, value=$.artifactory.webhook.event} for org.jenkinsci.plugins.gwt.GenericVariable
    at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:334)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:474)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.coerceList(DescribableModel.java:585)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:458)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.buildArguments(DescribableModel.java:409)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:329)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:272)
    at org.jenkinsci.plugins.pipeline.modeldefinition.CommonUtils.instantiateDescribable(CommonUtils.java:131)
    at org.jenkinsci.plugins.pipeline.modeldefinition.CommonUtils$instantiateDescribable.callStatic(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194)
    at org.kohsuke.groovy.sandbox.impl.Checker$2.call(Checker.java:194)
    at org.kohsuke.groovy.sandbox.GroovyInterceptor.onStaticCall(GroovyInterceptor.java:35)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onStaticCall(SandboxInterceptor.java:186)
    at org.kohsuke.groovy.sandbox.impl.Checker$2.call(Checker.java:192)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedStaticCall(Checker.java:196)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:103)
    at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
Caused: java.lang.IllegalArgumentException: Could not instantiate {genericVariables=[{key=ARTIFACT_NAME, value=$.artifactory.webhook.data.name}, {event=EVENT_NAME, value=$.artifactory.webhook.event}], causeString=Triggered on $ARTIFACT_NAME} for org.jenkinsci.plugins.gwt.GenericTrigger

Upvotes: 1

Views: 1012

Answers (2)

JPNagarajan
JPNagarajan

Reputation: 928

I have made it. We have to enable print post contents in configure jenkins job under generic webhook trigger option. Once done it started to display json payload in console log. After that we can add variables using jsonpath filter from payload

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

Upvotes: 2

yahavi
yahavi

Reputation: 6043

I'd like to suggest a different approach using the Jenkins Artifactory plugin:

You can configure a build trigger in the UI: enter image description here

Or you can configure the build trigger in the pipeline:

stages {
    stage('Artifactory configuration') {
        steps {
            rtServer(
                    id: "ARTIFACTORY_SERVER",
                    url: SERVER_URL,
                    credentialsId: CREDENTIALS
            )
        }
    }

    stage('Add build trigger') {
        steps {
            rtBuildTrigger(
                    serverId: "ARTIFACTORY_SERVER",
                    spec: "*/10 * * * *",
                    paths: "generic-libs-local/builds/starship"
            )
        }
    }
}

To get the path in Artifactory that caused the trigger you can do the following:

environment {
    // The URL of the artifact in Artifactory, caused the job to be triggered.
    // May be empty if the build isn't triggered by a change in Artifactory.
    RT_TRIGGER_URL = "${currentBuild.getBuildCauses('org.jfrog.hudson.trigger.ArtifactoryCause')[0]?.url}"
}

Resources:

  1. Triggering builds
  2. Triggering Builds in Declarative pipeline
  3. Example

Upvotes: 0

Related Questions