在错误的GIT存储库上生成Bitbucket Webhook的构建

时间:2019-02-05 15:21:55

标签: jenkins jenkins-pipeline openshift webhooks pipeline

我想在Bitbucket上发生事件时触发OpenShift上的管道(例如,推送)。我按照Openshift文档页面上的说明正确配置了Webhook。尽管我必须更改管道的Openshift模板,但这会产生一些冲突。

BuildConfig看起来像这样:

- apiVersion: "v1"
  kind: "BuildConfig"
  metadata:
    name: "${SERVICE_NAME}-pipeline"
  spec:
    source:
      contextDir: '${APPLICATION_GIT_JENKINSFILE_REPO_CONTEXT_DIR}'
      git:
        ref: master
        uri: '${APPLICATION_GIT_JENKINSFILE_REPO}'
      sourceSecret:
        name: git-secret
      type: Git
    strategy:
      jenkinsPipelineStrategy:
        jenkinsfilePath: Jenkinsfile
    triggers:
    type: "Bitbucket"
    bitbucket:
        secretReference:
            name: "mysecret"

因此,在“源”组件上,我引用了Jenkinsfile所在的git存储库。这样,我可以有多个管道,并且只集中一个Jenkinsfile。请注意,此仓库与我配置Webhook的api的位置完全不同。

尽管这种方法在自动触发时失败,但是由于发送到Openshift的有效负载具有相应api存储库更改的提交ID的事实。 Openshift(我不知道为什么)尝试将提交与该模板(Jenkinsfile存储库)上存在的存储库关联。

日志如下:

 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url http://jenkinsfile-repo.git # timeout=10
Fetching upstream changes from http://jenkinsfile-repo.git
 > git --version # timeout=10
using GIT_ASKPASS to set credentials git-secret
 > git fetch --tags --progress http://jenkinsfile-repo.git +refs/heads/*:refs/remotes/origin/*
 > git rev-parse 79370e4fa88f19c693d85d82fbdbed77620d048b^{commit} # timeout=10
hudson.plugins.git.GitException: Command "git rev-parse 79370e4fa88f19c693d85d82fbdbed77620d048b^{commit}" returned status code 128:
stdout: 79370e4fa88f19c693d85d82fbdbed77620d048b^{commit}

stderr: fatal: ambiguous argument '79370e4fa88f19c693d85d82fbdbed77620d048b^{commit}': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2016)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1984)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1980)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommand(CliGitAPIImpl.java:1612)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommand(CliGitAPIImpl.java:1624)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.revParse(CliGitAPIImpl.java:809)
    at hudson.plugins.git.GitAPI.revParse(GitAPI.java:316)
    at hudson.plugins.git.RevisionParameterAction.toRevision(RevisionParameterAction.java:98)
    at hudson.plugins.git.GitSCM.determineRevisionToBuild(GitSCM.java:1070)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1187)
    at org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.java:113)
    at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:144)
    at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:67)
    at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:303)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:429)
Finished: FAILURE

我们可以看到我试图解释的行为,“ 79370e4fa88f19c693d85d82fbdbed77620d048b”是api仓库中的提交ID,OpenShift试图将其与jenkinsfile仓库关联。

例如,如果我可以忽略有效负载,则该问题将不存在。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我认为您不需要put类型:git(duplicate)并尝试使用https:// bitbucket url,

source:
  contextDir: '${APPLICATION_GIT_JENKINSFILE_REPO_CONTEXT_DIR}'
  git:
    ref: master
    uri: '${APPLICATION_GIT_JENKINSFILE_REPO}'
  sourceSecret:
    name: git-secret
  type: Git *****remove and try ?

答案 1 :(得分:0)

尽管我仍然不明白为什么以前指定的行为会发生,但我设法实现了变通方法。

基本上当前的解决方案如下:

openshift模板引用相应API的GIT存储库,并且该存储库具有自己的Jenkins文件,每个API都相同。虽然,此Jenkinsfile唯一要做的就是调用一个Groovy脚本,该脚本集中在一个单独的GIT存储库中,并在Jenkins中声明为共享库。

这样,如果我们必须更改某些内容(例如,管道的某个阶段),则只需要在单个位置进行更改,这就是开始的目的。