我正在尝试在 Github 中获取某个 repo 的分支,与执行相同:
curl -k -X GET https://api.github.com/repos/rackt/redux/forks
但是在 Jenkins 的 DSL 脚本中。
为什么?因为我想克隆所有人的 fork 并在job-dsl-plugin生成的单独作业上构建项目。
当然,这只是我发现的一个 repo 的一个例子。我正在尝试使用带有私有存储库的 SSH 凭据来做到这一点。
你知道哪一种是最好的方法吗?
我正在尝试在 Github 中获取某个 repo 的分支,与执行相同:
curl -k -X GET https://api.github.com/repos/rackt/redux/forks
但是在 Jenkins 的 DSL 脚本中。
为什么?因为我想克隆所有人的 fork 并在job-dsl-plugin生成的单独作业上构建项目。
当然,这只是我发现的一个 repo 的一个例子。我正在尝试使用带有私有存储库的 SSH 凭据来做到这一点。
你知道哪一种是最好的方法吗?
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 脚本通过其标识符引用凭据。这也是最安全的选项,因为不需要将凭据传递给 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')
}
}
}
}
我终于通过这样做解决了(请参阅我发布的 Gist):
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>')
}
}
}
}
}
谢谢!