当前位置: 首页 > 知识库问答 >
问题:

如何使用Jenkinsfile设置github提交状态而不使用请求生成器

卢知
2023-03-14

我们将Jenkins2设置为构建每个向github的推送,我们不使用Pull Request构建器(尽管作为Pull请求一部分的提交显然也会被构建)。GitHub集成插件说它只适用于pull request builder,所以这对我们来说不起作用。

我也尝试过github-notify插件,但它似乎不适合我们的情况(可能是因为回购是私有的和/或作为组织的一部分拥有的,而不是个人用户)。我尝试让它推断设置,并手动指定credentialsidaccountrepo,当然还有status参数,但都没有成功。

以下是我目前的Jenkinsfile的缩略版本:

pipeline {
    agent { label "centos7" }

    stages {
        stage("github => pending") {
            steps {
                githubNotify status: "PENDING", credentialsId: "my-credentials-id", account: "my-account", repo: "my-repo"
            }
        }
        stage("build") {
            ...
        }
    }

    post {
        success {
            githubNotify status: "SUCCESS", credentialsId: "my-credentials-id", account: "my-account", repo: "my-repo"
        }
        failure {
            githubNotify status: "FAILURE", credentialsId: "my-credentials-id", account: "my-account", repo: "my-repo"
        }
    }
}

当我运行构建时,我会得到以下结果:

java.lang.IllegalArgumentException: The suplied credentials are invalid to login
    at org.jenkinsci.plugins.pipeline.githubstatusnotification.GitHubStatusNotificationStep.getGitHubIfValid(GitHubStatusNotificationStep.java:234)
    at org.jenkinsci.plugins.pipeline.githubstatusnotification.GitHubStatusNotificationStep.getRepoIfValid(GitHubStatusNotificationStep.java:239)
    at org.jenkinsci.plugins.pipeline.githubstatusnotification.GitHubStatusNotificationStep.access$100(GitHubStatusNotificationStep.java:75)
    at org.jenkinsci.plugins.pipeline.githubstatusnotification.GitHubStatusNotificationStep$Execution.run(GitHubStatusNotificationStep.java:344)
    at org.jenkinsci.plugins.pipeline.githubstatusnotification.GitHubStatusNotificationStep$Execution.run(GitHubStatusNotificationStep.java:326)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
    at hudson.security.ACL.impersonate(ACL.java:221)
    at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

我已经通过Jenkins(在Configure System区域)和在浏览器中手动测试了凭据--用户名和密码是正确的,并且可以对所讨论的repo进行读/写访问。

共有1个答案

万喜
2023-03-14

根据Jenkins GitHub插件自己的示例:

void setBuildStatus(String message, String state) {
  step([
      $class: "GitHubCommitStatusSetter",
      reposSource: [$class: "ManuallyEnteredRepositorySource", url: "https://github.com/my-org/my-repo"],
      contextSource: [$class: "ManuallyEnteredCommitContextSource", context: "ci/jenkins/build-status"],
      errorHandlers: [[$class: "ChangingBuildStatusErrorHandler", result: "UNSTABLE"]],
      statusResultSource: [ $class: "ConditionalStatusResultSource", results: [[$class: "AnyBuildResult", message: message, state: state]] ]
  ]);
}

... 

pipeline {
  stages {
     ...
  }
  post {
    success {
        setBuildStatus("Build succeeded", "SUCCESS");
    }
    failure {
        setBuildStatus("Build failed", "FAILURE");
    }
  }
}

无需多余的插件。只要安装并正确配置了GitHub插件,您甚至不需要执行上述操作,它应该会自动发生。我们也没有使用Pull Request builder,而是使用Jenkins Multibranch管道。我们只是在PR中使用上面的代码片段来增加状态粒度。

 类似资料:
  • 我在试用詹金斯的本地版本。一切都是最新的版本。我已经安装了GitHub请求构建器,但我无法让它向GitHub报告构建状态,并用成功、失败或错误更新PR。 我执行了以下步骤: Manage Jenkins>Configure System>Github Pull Request Builder:我已经添加了凭据并成功执行了所有测试: 测试到GitHub->Works的基本连接 测试存储库的权限->工

  • 我正尝试仅使用.NET代码创建证书请求,并将该请求提交给我们的前提Active Directory PKI证书颁发机构,然后取回证书。我有一个已经工作了几年的解决方案,但它使用了CERTCLILib和CERTENROLLLib,我希望摆脱这些依赖关系,并将此代码移植到.NET5。 然后将这些证书导入到Yubikey设备上。我们在Yubikey上生成密钥对,然后将公钥与CSR一起使用。 这里的问题使

  • 我很难从一个外部工具发送一个成绩到谷歌课堂。我可以发送等级(assignedGrade和draftGrade)并且可以更改它们。我看到了我的变化,在返回的学生提交,在学生提交的历史,但我永远不能说服教室的作业已经“评分”或“完成”。以教师的身份审视学生的工作,我看到以下几点: 我储存等级的所有尝试都在那里,但仍然是“未分级”。下面是我用来设置等级的代码: 这基本上起作用了--新的等级出现了,一个新

  • 问题内容: 我是Liferay门户网站的新手。我已经在liferay中开发了一个portlet进行演示。在此示例中,我使用了portlet间的通信。我正在做的是:-我有一个搜索portlet,其中有一个要搜索的文本字段。当我单击搜索按钮时,它将从数据库中获取数据,并使用另一个portlet中包含的搜索显示该数据。我为此项目使用了ProcessEvent和ActionEvent批注。 现在我想要的是

  • 如何使用< code>HttpURLConnection设置HTTP请求方法MOVE? 使用< code>HttpURLConnection或依赖于该类的库,代码将引发异常< code >,其原因是:Java . net . protocol exception:Invalid HTTP method:MOVE 。所以我猜Java平台不支持< code>MOVE方法。 是否有针对此问题/限制的补丁