【问题标题】:How to get the payload information from jfrog webhook trigger on jenkins如何从詹金斯上的 jfrog webhook 触发器获取有效负载信息
【发布时间】:2022-10-25 23:44:54
【问题描述】:

我正在设置一个 jenkins 作业,每当在 jfrog 中部署工件时都会触发该作业。我已按照以下文档中的步骤进行操作,并且能够触发作业。但不幸的是,我无法获取变量值。我不确定如何查看我们在詹金斯上收到的有效负载侧拉所需的变量。

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

我的管道:

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'
            }
        }
    }
}

詹金斯工作日志:

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

【问题讨论】:

    标签: jenkins jenkins-plugins artifactory


    【解决方案1】:

    我做到了。我们必须在通用 webhook 触发器选项下的配置 jenkins 作业中启用打印帖子内容。完成后,它开始在控制台日志中显示 json 有效负载。之后,我们可以使用来自有效负载的 jsonpath 过滤器添加变量

    【讨论】:

      【解决方案2】:

      我想建议使用Jenkins Artifactory plugin 的不同方法:

      您可以在 UI 中配置构建触发器:

      或者您可以在管道中配置构建触发器:

      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"
                  )
              }
          }
      }
      

      要获取 Artifactory 中导致触发器的路径,您可以执行以下操作:

      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}"
      }
      

      资源:

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

      【讨论】:

      • 嗨@yahavi,你提到的方法的问题是资源消耗。这是轮询方法,我们需要保持轮询,我需要将其设置为 15+ 工作,这将是密集的。这就是我的原因尝试 webhook 触发方法
      猜你喜欢
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 2015-10-03
      相关资源
      最近更新 更多