私はこれをどのようにしたのですか?私は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;
興味深い課題マルチブランチジョブの形式?または、GitHub APIなどを介してのみ取得できますか? – StephenKing
現在、私は手動で入力されたreposの選択可能なリストを持っています。 gitはそれらの名前をリポジトリ名として取得し、チェックアウトします。 現在、github apiでのみ利用可能ですが、マルチブランチジョブである必要がある場合は、個々のジョブとしてジェンキンに追加することができます。 ビルドする必要のあるプロジェクトにjenkinsfileを追加することを考えました。 jenkinsファイルにブランチ名とともにjsonまたはxmlファイルにレポ名のリストを保存させることができます。しかし、これを避けることができれば、私はより良いと思うでしょう。 –
Jenkinsインスタンスで定義されているジョブのリストをGroovyから読み込むことができます。 – StephenKing