2015-09-21 2 views
0

Я пытаюсь принести вилы определенного репо в Github, то же самое о выполнении:DSL Работа в Дженкинс и Github

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

Но в DSL сценария в Дженкинс.

Почему? Потому что я хотел бы клонировать все вилки людей и строить проект на отдельных заданиях, созданных job-dsl-plugin.

Конечно, это всего лишь пример с репо, который я нашел. Я пытаюсь сделать это с учетными данными SSH с частными репозиториями.

Знаете ли вы, что было бы лучшим способом сделать это?

ответ

0

Я наконец-то решил, делая 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>') 
       } 
      } 
     } 
    } 
} 

Спасибо!

4

Существует реальный пример мира в 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 закрытия и использовать вилки имя.

Что касается ваших комментариев о ssh и частных репозиториях. Его хорошая идея, чтобы сохранить ваш ключ SSH из сценария с помощью Credentials plugin как wiki говорит

Первый вариант предполагает Credentials Plugin который управляет учетными данными в безопасном режиме и позволяет работу 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') 
      } 
     } 
    } 
} 
Смежные вопросы