【问题标题】:DSL Job in Jenkins and GithubJenkins 和 Github 中的 DSL 工作
【发布时间】:2015-09-21 16:24:03
【问题描述】:

我正在尝试在 Github 中获取某个 repo 的 fork,与执行相同:

curl -k -X GET https://api.github.com/repos/rackt/redux/forks

但在 Jenkins 的 DSL 脚本中。

为什么?因为我想克隆所有人的 fork 并在 job-dsl-plugin 生成的单独作业上构建项目。

当然,这只是我找到的一个 repo 的一个例子。我正在尝试使用带有私有存储库的 SSH 凭据。

你知道哪种方法最好吗?

【问题讨论】:

    标签: git github jenkins dsl jenkins-job-dsl


    【解决方案1】:

    wiki 中有一个真实世界的示例,详细说明了如何创建 jobs for branches

    def project = 'Netflix/asgard'
    def branchApi = new URL("https://api.github.com/repos/${project}/branches")
    def branches = new groovy.json.JsonSlurper().parse(branchApi.newReader())
    branches.each {
        def branchName = it.name
        def jobName = "${project}-${branchName}".replaceAll('/','-')
        job(jobName) {
            scm {
                git("https://github.com/${project}.git", branchName)
            }
        }
    }
    

    您需要做的是将job 部分移到each 闭包之外并使用fork 名称。

    至于关于 ssh 和私人仓库的 cmets。使用Credentials plugin 就像wiki 说的那样,让你的ssh 密钥远离脚本是个好主意

    第一个选项涉及Credentials Plugin,它管理 以安全的方式提供凭据,并允许作业 DSL 脚本引用 按其标识符的凭据。这也是最安全的选择 因为凭据不需要传递给 Job DSL 脚本。

    // use the github-ci-key credentials for authentication with GitHub
    job('example-1') {
        scm {
            git {
                remote {
                    github('account/repo', 'ssh')
                    credentials('github-ci-key')
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我终于通过this (see the Gist I published)解决了:

      import groovy.json.JsonSlurper
      
      def owner = "<owner>"
      def project = "<project>"
      
      // curl -k -u <user>:<token> -X GET https://api.github.com/repos/<owner>/<repo>/forks > forks.txt
      
      def fetch(addr, params = [:]) {
        def auth = "<personalAPIToken>" // see https://github.com/blog/1509-personal-api-tokens
        def json = new JsonSlurper()
        return json.parse(addr.toURL().newReader(requestProperties: ["Authorization": "token ${auth}".toString(), "Accept": "application/json"]))
      }
      
      def forks = fetch("https://api.github.com/repos/${owner}/${project}/forks")
      
      forks.each {
          def fork = it.full_name
          def name = it.owner.login
          def jobName = "${project}-${name}".replaceAll('/','-')
          job(jobName) {
              scm {
                  git {
                    remote {
                      github(fork, 'https')
                      credentials('<idCredentials>')
                    }
                  }
              }
          }
      }
      

      谢谢!

      【讨论】:

        猜你喜欢
        • 2018-07-18
        • 1970-01-01
        • 1970-01-01
        • 2018-11-28
        • 2017-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多