プラグイン内で新しいJenkinsジョブを作成するにはどうすればよいですか?
メッセージキューをリッスンし、メッセージが到着すると、新しいイベントを発生させて新しいジョブを作成する(または実行を開始する)Jenkinsプラグインがあります。
私は次のようなものを探しています:
Job myJob = new Job(...);
REST APIまたはCLIを使用できることはわかっていますが、プラグインを使用しているため、Java内部ソリューションを使用します。
プラグイン内で新しいJenkinsジョブを作成するにはどうすればよいですか?
メッセージキューをリッスンし、メッセージが到着すると、新しいイベントを発生させて新しいジョブを作成する(または実行を開始する)Jenkinsプラグインがあります。
私は次のようなものを探しています:
Job myJob = new Job(...);
REST APIまたはCLIを使用できることはわかっていますが、プラグインを使用しているため、Java内部ソリューションを使用します。
JobDSLプラグインを使用します。
プラグインページから:
Jenkinsはビルドを管理するための素晴らしいシステムであり、人々はそのUIを使用してジョブを構成するのが大好きです。残念ながら、ジョブの数が増えると、それらを維持するのは面倒になり、UIを使用するパラダイムは崩壊します。さらに、この状況での一般的なパターンは、ジョブをコピーして新しいジョブを作成することです。これらの「子」は、元の「テンプレート」から逸脱する傾向があり、その結果、これらのジョブ間の一貫性を維持することが困難になります。
Jenkins job-dsl-pluginは、生成されたジョブと同期されるテンプレートを使用して、プログラム形式で必要な最小限のジョブを定義できるようにすることで、この問題を解決しようとします。目標は、プロジェクトがプロジェクトに関連付けたいすべてのジョブを定義できるようにし、ジョブの意図を宣言し、共通のものを以前に定義された、またはDSLの背後に隠されたテンプレートに任せることです。
次の手順を実行するだけで、新しいハドソン/ジェンキンスジョブを作成できます。
FreeStyleProject proj = Hudson.getInstance().createProject(FreeStyleProject.class, NAMEOFJOB);
更新を処理できるようにしたい場合(そしてすでに持っている場合config.xml
):
import hudson.model.AbstractItem
import javax.xml.transform.stream.StreamSource
import jenkins.model.Jenkins
final jenkins = Jenkins.getInstance()
final itemName = 'name-of-job-to-be-created-or-updated'
final configXml = new FileInputStream('/path/to/config.xml')
final item = jenkins.getItemByFullName(itemName, AbstractItem.class)
if (item != null) {
item.updateByXml(new StreamSource(configXml))
} else {
jenkins.createProjectFromXML(itemName, configXml)
}
ただし、これを行う前に、コア.jarファイルがあることを確認してください。