diary.sorah.jp

いちがつじゅうさんにち: GHEv2 の話, Jenkins の groovy script console 便利

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()

Backfilled at , Published at