GitHub Enterprise v2 の話
http://techlife.cookpad.com/entry/20150113/104500/ghe-v2
社の技術ブログに、いままでオフィスのしょぼいマシンで稼動していた GitHub Enterprise v11.10.xxx シリーズの installation を AWS 上に新規構築した GitHub Enterprise v2 へ移行した話を書いた。
はてブおもったより稼いでるけどみんな GHE の運用にそんな興味あるのかな…?
Jenkins の groovy script console が便利
Java 上のメソッドだいたい叩けるからドキュメントみながら適当にいじっていた。ラベルの整理とか (利用しなくなったラベルを全台から剥奪したり、ラベル状況みたり)、スクリプト一括置換とか。スクリプトに関しては run_ci.sh みたいなのをリポジトリにコミットしてる例もあるから完璧とはいかないけど。
// show node and labels
Jenkins.instance.computers.each() { cmp ->
// assignedLabels
println("${cmp.node.displayName}: ${cmp.node.labelString}”)
}
// replace labels in jobs
Jenkins.instance.items.each { job ->
if ( ! job.assignedLabel ) return
newLabelExpr = Label.parseExpression(job.assignedLabel.expression.replaceAll(‘foo’,’bar’))
job.assignedLabel = newLabelExpr
job.save()
println("${job.displayName}: ${job.assignedLabel}")
}
// Replace build scripts
Jenkins.instance.items.each { job ->
println("${job.displayName}:")
list = job.buildersList
builder = list.get(tasks.Shell)
if ( builder && (builder.contents =~ /FOO/) ) {
println("match.”)
newBuilder = new tasks.Shell(builder.contents.replaceAll(/FOO/, ‘BAR’))
list.replace(newBuilder)
job.save()
}
println("-")
}
// Grep label expression in all jobs
Jenkins.instance.items.each { job ->
if ( ! job.assignedLabel ) return
if ( ! (job.assignedLabel.expression =~ /java/) ) return
println("${job.displayName}: ${job.assignedLabel}")
}
// remove specific label from all nodes.
labelToRemove = 'java'
labelAtomToRemove = new labels.LabelAtom(labelToRemove)
Jenkins.instance.computers.each() { cmp ->
if ( ! cmp.node.assignedLabels.contains(labelAtomToRemove) ) return
cmp.node.labelString = cmp.node.labelString.replaceAll("(^|\\s+)${labelToRemove}(\\s+|\$)",' ').replace(/^\s+/,'').replace(/\s+$/,'')
println("${cmp.node.displayName}: ${cmp.node.labelString}")
}
Jenkins.instance.save()