2017-06-05 15 views
1

こんにちは、私はreposのリストを取得し、私のパイプラインのための選択可能な選択パラメータとしてそれらを提示できるようにしたい。Jenkins - 選択肢のパラメータとしてreposと分岐を取得する

は何これを行うための最善の方法だろうか?

私はすべてのリポジトリとブランチを掻き集め、xmlまたはjsonファイルにリストを作成する何らかの種類のビルドを実行する必要がないようにしたいと考えています。

また、そのリポジトリ内のすべてのブランチを取り出し、別の選択可能な選択肢パラメータとして表示できるようにしたいと考えています。

編集:

githubの組織のプロジェクト認識器の異なるタイプを追加する方法はあります。私はjenkinsfileを使いたくありません。むしろ、私がこのリストに必要としない他のリポジトリにjenkinsFilesを持っているので、repo( "JenkinsProject.xml")内の特定のファイル名を探すでしょう。

編集2:

私はジェンキンスで、このshコマンドを発見しました。

resolveScm源:githubの(checkoutCredentialsId: 'SAME'、ID: '_'、repoOwner 'GITOWNER'、リポジトリ 'REPONAME'、scanCredentialsId 'CREDENTIALS')、ターゲット:[」 ']

与えられたレポのすべての枝を見つけるようです。しかし、コンソールへの唯一の出力として、提供された情報にどのようにアクセスしますか?

編集3

オーケーだから、私はgithubのAPIを使用することになると思います。 JSON形式で与えられた組織内のすべてのリポジトリを返す

ORG /レポ

:私は

GET/ORGS /このAPIコールを呼び出すことができます。その後、私は、各レポのマスターをチェックアウトすることができレポ/支店

:所有者/:ここから私は、APIコール

GET /レポ/と指定したレポですべての枝をつかむことができます。 masterに "JenkinsProject.xml"が含まれている場合、私はrepo名とブランチ名をファイルに保存します。ファイルは希望のパラメータとして使用されます。

悲しいことに、悲しいことに、私はすべてのレポを解析する以外にこれを行う別の方法を見つけることができません。

この問題が再び発生した場合は、この質問を再度更新します。そうでない場合より提案

編集にまだ開いイム4

私はパラメータとして、このJSONファイルをインポートする方法を考え出す助けが必要です。または、おそらくjsonを使用しないでください。ビルドスクリプトを解析して更新し、コミットする必要があるかもしれません。

+0

興味深い課題マルチブランチジョブの形式?または、GitHub APIなどを介してのみ取得できますか? – StephenKing

+0

現在、私は手動で入力されたreposの選択可能なリストを持っています。 gitはそれらの名前をリポジトリ名として取得し、チェックアウトします。 現在、github apiでのみ利用可能ですが、マルチブランチジョブである必要がある場合は、個々のジョブとしてジェンキンに追加することができます。 ビルドする必要のあるプロジェクトにjenkinsfileを追加することを考えました。 jenkinsファイルにブランチ名とともにjsonまたはxmlファイルにレポ名のリストを保存させることができます。しかし、これを避けることができれば、私はより良いと思うでしょう。 –

+0

Jenkinsインスタンスで定義されているジョブのリストをGroovyから読み込むことができます。 – StephenKing

答えて

0

私はこれをどのようにしたのですか?私はJenkinsProject.xmlファイルをこの仕事で構築したいゲームの中に持っています。

私はjenkinsfileを使ってJenkisDevOpsというレポを持っています。

このjenkinsfileはgithub apiを呼び出し、これをファイルに保存します。

組織内のファイルを検索するためのAPIコールは

https://api.github.com/search/code?q=orgです:{} ORGANIZATION_NAME +ファイル名:{FILENAME}

これはその中にこのファイルを使用して、すべてのレポを返します。ここから私はこれらのリポジトリの各ブランチを取得できます。ここから次に

https://api.github.com/repos/ {ORGANIZATION_NAME}/{REPO_NAME} /支店

私は完全なスクリプトはここにある

repos{ 
    repo:{ 
     name:"repoName", 
     branches:{ 
      name:"branchname", 
      name:"branchName2" 
      ... 
     } 
    } 
} 

とJSONファイルにこのすべてを保存します。私はまだ、保存されたjsonファイルをパラメータオプションに変換する方法を理解する必要があります。

pipeline { 
agent any 

stages { 
stage ('Create Build Parameters'){ 
    steps{ 
     sh 'echo !---SETUP---!' 
     git credentialsId: '', url: 'https://github.com/GenesisGaming/DevOpsJenkins.git' 
     httpRequest acceptType: 'APPLICATION_JSON', authentication: '', consoleLogResponseBody: false, contentType: 'APPLICATION_JSON', outputFile: 'Repos.json', responseHandle: 'NONE', url: 'https://api.github.com/search/code?q=org:GenesisGaming+filename:Project.xml&per_page=100' 
     readFile 'Repos.json' 
     stash includes: '**', name: 'build' 
     script { 
      node{ 
       unstash 'build' 
       env.WORKSPACE = pwd() 
       def buildConfig = load "GenerateBuildSelections.Groovy" 
       def repos = buildConfig.GetListOfRepos("${env.WORKSPACE}/Repos.json") 

       def dataMap = new HashMap<String,List>() 
       for(i = 0; i < repos.size(); i++){ 
        def repoName = repos[i] 
        httpRequest acceptType: 'APPLICATION_JSON', authentication: '', consoleLogResponseBody: false, contentType: 'APPLICATION_JSON', outputFile: "branches_${repoName}.json", responseHandle: 'NONE', url: "https://api.github.com/repos/GenesisGaming/${repoName}/branches" 
        env.WORKSPACE = pwd() 
        def branches = buildConfig.GetListOfBranches("${env.WORKSPACE}/branches_${repoName}.json") 
        dataMap.put("${repoName}", "${branches}") 

       } 
       def builder = new groovy.json.JsonBuilder(dataMap) 
       new File("/home/service/BuildSelectionOptions/options.json").write(builder.toPrettyString()) 
      } 
     } 
    } 
} 
} 
post { 
always { 
    sh 'echo !---Cleanup---!' 
    cleanWs() 
} 
} 
} 

アクティブなパラメータプラグインを使用して、選択可能なブランチとreposを取得しました。

selectedgame(repo)の場合は、このスクリプトでgroovyscriptを使用します。これらのリポジトリがでジェンキンスにすべて表示されます:-)

#!/usr/bin/env groovy 
import groovy.json.JsonSlurper 

def inputFile = new File("/var/BuildOptions/options.json") 
def InputJSON = new JsonSlurper().parseText(inputFile.text) 
def output = [] 
InputJSON.each{key, val -> 
    output.add(key) 
} 
return output; 

、その後、分岐パラメータに私はこのグルーヴィーなスクリプトでアクティブな反応パラメータの選択を使用して、私はselectedGameパラメータを参照

#!/usr/bin/env groovy 
import groovy.json.JsonSlurper 

def inputFile = new File("/var/BuildOptions/options.json") 
def InputJSON = new JsonSlurper().parseText(inputFile.text) 
def output = [] 
InputJSON.each{key, val -> 
String strOut = "" 
if(selectedGame == key){ 
    val.each { outChar -> 
     if(outChar == "[" || outChar == " ") 
     { 
      strOut = "" 
     } 
     else if(outChar == "]" || outChar == ",") { 
      output.add(strOut) 
      strOut = "" 
     } 
     else 
     { 
      strOut+= outChar 
     } 
    } 
} 
} 

return output; 
関連する問題