代码之家  ›  专栏  ›  技术社区  ›  César Pereira

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

  •  0
  • César Pereira  · 技术社区  · 6 年前

    当bitbucket上发生事件时,我想在OpenShift上触发一个管道(例如push)。我按照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"
    

    因此,在“源”组件上,我引用了我的Jenkins文件所在的git存储库。这样,我可以有许多管道,只有一个文件。注意,这个repo与我配置webhook的api的位置完全不同。

    尽管这种方法在自动触发器上失败,因为发送到Openshift的负载具有相应api存储库更改的提交id。Openshift(我不知道为什么)尝试将提交与此模板(Jenkins文件repo)上存在的repo相关联。

    日志如下所示:

     > 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
    

    例如,如果我可以忽略有效载荷,那么问题就不存在了。

    谢谢你的帮助。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Guru    6 年前

    我认为您不需要put类型:git(重复)并尝试使用https://bitbucketurl,

    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 ?
    
        2
  •  0
  •   César Pereira    6 年前

    目前的解决方案基本上如下所示:

    openshift模板引用了各自API的GIT存储库,该存储库有一个自己的Jenkins文件,这对于每个API都是一样的。尽管如此,这个Jenkins文件所做的唯一事情是调用一个groovy脚本,该脚本集中在一个单独的GIT存储库中,并在Jenkins中声明为一个共享库。