1

実行と同じように、Github で特定のリポジトリのフォークをフェッチしようとしています。

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

しかし、Jenkins の DSL スクリプトでは。

なんで?すべての人のフォークを複製し、job-dsl-pluginによって生成された個別のジョブでプロジェクトをビルドしたいためです。

もちろん、これは私が見つけたレポの単なる例です。プライベート リポジトリを使用して SSH 資格情報を使用して実行しようとしています。

それを行うための最良の方法はどれか知っていますか?

4

2 に答える 2

4

ブランチのジョブを作成する方法を詳しく説明しているwikiに実際の例があります。

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、フォーク名を使用することです。

ssh とプライベート リポジトリに関するコメントについて。wikiのようにCredentials プラグインを使用して、ssh キーをスクリプトから除外することをお勧めします。

最初のオプションには、クレデンシャルを安全な方法で管理し、ジョブ DSL スクリプトが識別子によってクレデンシャルを参照できるようにするクレデンシャル プラグインが含まれます。資格情報をジョブ 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')
            }
        }
    }
}
于 2015-09-21T21:05:22.017 に答える
0

私は最終的にこれを行うことで解決しました(私が公開した要点を参照してください)

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

ありがとう!

于 2015-09-22T08:57:56.087 に答える