以前の1つのジョブに基づいてもう1つのハドソンジョブで新しいハドソンジョブを作成する方法はありますか?
たとえば、新しいジョブの束を1つずつ作成する必要がある場合、異なるパラメーターを使用して同様の構成で4つのジョブを自動的に作成します
基本的にこのような手順
svn cp
コマンドを呼び出して、スクリプトを使用してパラメーター化することができますsvnbranch
名に基づいてビルドを作成しますまたは、他の言葉で言えば、前のジョブのクローンを作成し、$ Branchが新しいジョブに入るたびに新しいブランチ名を付ける必要があります。
ありがとう
この種のタスクにはHudson Remote APIを試すことができます( Hudsonプロジェクトの設定 )。
たとえば、このチュートリアルを参照してください。ヘルプを非常に簡単に表示できることを忘れないでください。
Java -jar hudson-cli.jar -s http://your_Hudson_server/ help
したがって、ジョブをコピーするには:
Java -jar hudson-cli.jar -s http://your_Hudson_server/ copy-job myjob copy-myjob
次のようなGroovyシステムスクリプトを使用できます。
def jenkins = hudson.model.Hudson.instance
def template = jenkins.getItem("MyTemplate")
def job = jenkins.copy(template,"MyNewJob")
job.scm = new hudson.scm.SubversionSCM("http://base/branches/mybranche")
job.save()
すでに他の回答でカバーされているようなものですが、config.xmlをコピーする簡単な方法は次のとおりです。
curl --user USER:PASS -H "Content-Type: text/xml" -s
--data-binary "@config.xml" "http://hudsonserver:8080/createItem?name=newjobname"
Jenkins用のプラグインがあるようです。
https://wiki.jenkins-ci.org/display/JENKINS/Job+DSL+Plugin
プラグインはまだテストしていません。ただし、プラグインが機能する場合は、ジョブを直接コピーして変数/値を変更することによる人的エラーの一部を軽減する必要があります。
def jenkins = hudson.model.Hudson.instance
def template = jenkins.getItem("MyTemplate")
def job = jenkins.copy(template,"MyNewJob")
job.save()
これを使用しました。Groovyを使用してMyNewJobのパラメーター値を変更する必要があります。どうすればよいですか?
ex「Build_BranchName」というパラメータがあり、デフォルトは// perforce/mybranchです。//perforce/mynewbranchに変更する必要があります。
GITを使用する場合(私のように、メインのSVNリポジトリをHudson/Jenkinsサーバーにミラーリングすると、うまく機能します)... .. Stephen Habermanの 受信後)を試すことができます。 -ハドソン :
このフックは、Hudson継続的インテグレーションツールのブランチごとに新しいジョブを作成します。必要に応じてジョブを作成するだけでなく、プッシュしたユーザーがまだそこにいない場合は、ジョブのメーリングリストに追加されます。
いずれにせよ、そのスクリプトは、Jenkins(Hudson)をリモートコントロールする方法に関する新しいヒントを提供します。
VonCが提供したオプションがあります(これはおそらく最も安全な方法ですが、{Hudson_Home}\jobsに新しいディレクトリを作成して(ディレクトリ名はジョブ名になります)、変更したものをコピーするだけで別のルートに移動することもできますconfig.xmlがあります。変更は基本的にSVNURLだけです。コピーするジョブからxmlをチェックアウトする必要があります。スクリプトを介してxmlファイルを変更する方法を確認する必要がありますが、これは二次的な問題です。 。
残念ながら、Hudsonを再起動するか、構成を強制的に再ロードする必要があります。 (構成を再ロードするには、http://:/ reloadページにアクセスしてください)。