2人の異なるJenkins 'の間で仕事を交換することは可能ですか?仕事をエクスポート/インポートする方法を探しています。
あなたがCIソフトウェアに慣れていないときに読みにくいけれども、ジェンキンスはかなり良いウィキを持っています...
サーバー間でジョブを移動する ための簡単な解決策を提供します
トリックはおそらくJenkinsの設定ページから設定をリロードする必要性でした。
おそらくjenkinsコマンドラインを使うことも別の方法です。 https://wiki.jenkins-ci.org/display/JENKINS/Jenkins + CLI
だからあなたはできる
Java -jar jenkins-cli.jar -s http://server get-job myjob > myjob.xml
Java -jar jenkins-cli.jar -s http://server create-job newmyjob < myjob.xml
それは私のためにうまく働きますそして私は私のバージョン管理システムの中に格納するのに慣れています
ワンライナー:
$ curl -s http://OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST 'http://NEW_JENKINS/createItem?name=JOBNAME' --header "Content-Type: application/xml" -d @-
認証あり
$ curl -s http:///<USER>:<API_TOKEN>@OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST 'http:///<USER>:<API_TOKEN>@NEW_JENKINS/createItem?name=JOBNAME' --header "Content-Type: application/xml" -d @-
Crumbでは、CSRFがアクティブの場合( 詳細はこちら を参照):
次のようにしてください。
$ CRUMB_OLD=$(curl -s 'http://<USER>:<API_TOKEN>@OLD_JENKINS/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
$ CRUMB_NEW=$(curl -s 'http://<USER>:<API_TOKEN>@NEW_JENKINS/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
-H CRUMB
を使用してパン粉を適用します。
$ curl -s -H $CRUMB_OLD http:///<USER>:<API_TOKEN>@OLD_JENKINS/job/JOBNAME/config.xml | curl -X POST -H $CRUMB_NEW 'http:///<USER>:<API_TOKEN>@NEW_JENKINS/createItem?name=JOBNAME' --header "Content-Type: application/xml" -d @-
Job Import Plugin というプラグインがあります。私はそれを使いました。匿名アクセスを許可しないサーバーからプロジェクトをインポートする際に問題があります。
完全性のために:もしあなたが両方へのコマンドラインアクセスを持っているなら、 Jenkinsジョブの移動、コピーそして名前変更 のためにKhezによって既に述べられた手順をすることができます。
Jenkinsサーバのフロントページに行き、ページ下部のREST APIをクリックします。
ジョブを作成
新しい求人を作成するには、このURLにクエリパラメータconfig.xml
を付けてname=JOBNAME
を投稿してください。 Content-Type: application/xml
ヘッダーを送る必要があります。正常に作成された場合は200
ステータスコード、失敗した場合は4xx/5xx
コードが表示されます。 config.xml
はプロジェクトをファイルシステムに保存するためにJenkinsが使用する形式なので、その例をJenkinsホームディレクトリに表示するか、/job/JOBNAME/config.xml
から既存のジョブのXML設定を取得して確認できます。
私のJenkinsインスタンス(バージョン1.548)では、設定ファイルは次の場所にあります。
/var/lib/jenkins/jobs/-the-project-name-/config.xml
644権限を持つjenkinsユーザーとjenkinsグループが所有しています。こことの間でファイルをコピーするとうまくいくはずです。私は直接それを変更しようとしませんでしたが、プロジェクトが再びセットアップされる必要がある場合に備えてこの場所から設定をバックアップしました。
Job Importプラグインは、他のJenkinsインスタンスからジョブをインポートする簡単な方法です。ソースのJenkinsインスタンスのURLを入力するだけです。リモートJenkins URLは、次の種類のURLのいずれかを取ります。
http://$JENKINS
- リモートインスタンス上のすべてのジョブを取得
http://$JENKINS/job/$JOBNAME
- 単一の仕事を得る
http://$JENKINS/view/$VIEWNAME
- 特定のビュー内のすべてのジョブを取得する
Larry Caiの回答のおかげで、私はすべてのJenkinsの仕事をバックアップするスクリプトを作成することができました。私は毎週これを実行する仕事を作成しました。誰かがそれが便利だと思う場合は、ここにあります。
#!/bin/bash
#IFS for jobs with spaces.
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for i in $(Java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ list-jobs);
do
Java -jar /run/jenkins/war/WEB-INF/jenkins-cli.jar -s http://server:8080/ get-job ${i} > ${i}.xml;
done
IFS=$SAVEIFS
mkdir deploy
tar cvfj "jenkins-jobs.tar.bz2" ./*.xml
Jenkinsがディレクトリにジョブをエクスポートする
#! /bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
declare -i j=0
for i in $(Java -jar jenkins-cli.jar -s http://server:8080/jenkins list-jobs --username **** --password ***);
do
let "j++";
echo $j;
if [ $j -gt 283 ] // If you have more jobs do it in chunks as it will terminate in the middle of the process. So Resume your job from where it ends.
then
Java -jar jenkins-cli.jar -s http://lxvbmcbma:8080/jenkins get-job --username **** --password **** ${i} > ${i}.xml;
echo "done";
fi
done
インポートジョブ
for f in *.xml;
do
echo "Processing ${f%.*} file.."; //truncate the .xml extention and load the xml file for job creation
Java -jar jenkins-cli.jar -s http://server:8080/jenkins create-job ${f%.*} < $f
done
Bashが利用可能かどうかに関わらず、Windowsの世界にいる私達にとっては、これが私のPowerShellのKatuとです。 )Larry Caiのアプローチ。誰かに役立つことを願っています。
##### Config vars #####
$serverUri = 'http://localhost:8080/' # URI of your Jenkins server
$jenkinsCli = 'C:\Program Files (x86)\Jenkins\war\WEB-INF\jenkins-cli.jar' # Path to jenkins-cli.jar on your machine
$destFolder = 'C:\Jenkins Backup\' # Output folder (will be created if it doesn't exist)
$destFile = 'jenkins-jobs.Zip' # Output filename (will be overwritten if it exists)
########################
$work = Join-Path ([System.IO.Path]::GetTempPath()) ([System.IO.Path]::GetRandomFileName())
New-Item -ItemType Directory -Force -Path $work | Out-Null # Suppress output noise
echo "Created a temp working folder: $work"
$jobs = (Java -jar $jenkinsCli -s $serverUri list-jobs)
echo "Found $($jobs.Length) existing jobs: [$jobs]"
foreach ($j in $jobs)
{
$outfile = Join-Path $work "$j.xml"
Java -jar $jenkinsCli -s $serverUri get-job $j | Out-File $outfile
}
echo "Saved $($jobs.Length) jobs to temp XML files"
New-Item -ItemType Directory -Force -Path $destFolder | Out-Null # Suppress output noise
echo "Found (or created) $destFolder folder"
$destPath = Join-Path $destFolder $destFile
Get-ChildItem $work -Filter *.xml |
Write-Zip -Level 9 -OutputPath $destPath -FlattenPaths |
Out-Null # Suppress output noise
echo "Copied $($jobs.Length) jobs to $destPath"
Remove-Item $work -Recurse -Force
echo "Removed temp working folder"
マシンに直接アクセスする最も簡単な方法は、ジョブフォルダ全体をディスク上のxmlファイルに保存するため、ジョブフォルダを最初のjenkinsから別のフォルダにコピーすることです(ワークスペースを除外できます - workspace
フォルダ)。
その後、新しいjenkinsでは、グローバル設定のreload configuration
(管理者アクセス権が必要です)で十分なはずです。そうでない場合は、Jenkinsツールを再起動する必要があります。
別の方法は、この記事の上で言及したプラグインを使うことです。
編集: - おそらくmodules
フォルダも除外できる場合
簡単なphpスクリプトは私のために働きました。
エクスポート:
// add all job codes in the array
$jobs = array("job1", "job2", "job3");
foreach ($jobs as $value)
{
fwrite(STDOUT, $value. " \n") or die("Unable to open file!");
$path = "http://server1:8080/jenkins/job/".$value."/config.xml";
$myfile = fopen($value.".xml", "w");
fwrite($myfile, file_get_contents($path));
fclose($myfile);
}
インポート:
<?php
// add all job codes in the array
$jobs = array("job1", "job2", "job3");
foreach ($arr as $value)
{
fwrite(STDOUT, $value. " \n") or die("Unable to open file!");
$cmd = "Java -jar jenkins-cli.jar -s http://server2:8080/jenkins/ create-job ".$value." < ".$value.".xml";
echo exec($cmd);
}
これは既存のジョブでは機能しませんが、 Jenkinsジョブビルダー があります。
これにより、yamlファイルと非常に移植性の高いgitリポジトリにジョブ定義を保存することができます。
手動でのジョブのインポート:代替方法
JobをGit(Version Control)にアップロードする基本的にJobのconfig.xmlをアップロードします。
Linuxサーバーの場合
cd /var/lib/jenkins/jobs/<Job name>
Download the config.xml from Git
Jenkinsを再起動してください
デフォルトでは、これは〜/ .jenkinsに設定されていますが、以下のいずれかの方法でこれを変更できます。
* Set "JENKINS_HOME" environment variable to the new home directory before launching
the servlet container.
* Set "JENKINS_HOME" system property to the servlet container.
* Set JNDI environment entry "JENKINS_HOME" to the new directory.
あなたのコンテナのためにこれをする方法の詳細についてはコンテナ特有のドキュメントコレクションを参照してください。
Jenkinsをしばらく使用した後でこの場所を変更することもできます。これを行うには、Jenkinsを完全に停止し、内容を古いJENKINS_HOMEから新しいホームに移動し、新しいJENKINS_HOMEを設定して、Jenkinsを再起動します。
JENKINS_HOMEのディレクトリ構造は、次のようになっています。
JENKINS_HOME
+- config.xml (jenkins root configuration)
+- *.xml (other site-wide configuration files)
+- userContent (files in this directory will be served under your
http://server/userContent/)
+- fingerprints (stores fingerprint records)
+- plugins (stores plugins)
+- workspace (working directory for the version control system)
+- [JOBNAME] (sub directory for each job)
+- jobs
+- [JOBNAME] (sub directory for each job)
+- config.xml (job configuration file)
+- latest (symbolic link to the last successful build)
+- builds
+- [BUILD_ID] (for each build)
+- build.xml (build result summary)
+- log (log file)
+- changelog.xml (change log)
バックアップして復元します。
すべての設定、ビルドログ、アーティファクトアーカイブはJENKINS_HOMEディレクトリに格納されています。このディレクトリを単にアーカイブするだけでバックアップできます。同様に、データの復元は、バックアップからJENKINS_HOMEディレクトリの内容を置き換えるだけです。
サーバーを停止せずにバックアップを取ることができますが、復元するときはサーバーを停止してください。
ジョブの移動/コピー/リネーム
あなたはできる:
これらの操作は、Jenkinsが実行されていても実行できます。このような変更を有効にするには、 "reload config"をクリックしてJenkinsにディスクから設定をリロードさせる必要があります。
バッチ名変更ジョブ
ジョブ名のスペースを下線で置き換える
$ rename 's/\s/_/g' *
未使用のジョブをアーカイブする
Jenkinsから仕事を削除したい場合がありますが、必要に応じて後で復活できるように削除します。これを行うには、$ JENKINS_HOMEに移動して、ジョブディレクトリのアーカイブを作成します。次のコマンドは、ジョブ「xyz」をアーカイブして削除する方法を示しています。
$ cd $JENKINS_HOME/jobs
$ tar czf xyz.tgz xyz
// go to Jenkins GUI "Manage Jenkins" page and "Reload Configuration from Disk"
アーカイブの作成中にxyzプロジェクトをビルドしていない限り、Jenkinsをオフラインにせずにこの操作を実行できます。
"Shelve Project"プラグイン もご覧ください。
スクリプトコンソール
トラブルシューティング、診断、またはジョブのバッチ更新に便利です。Jenkinsは、すべてのJenkins内部にアクセスできるスクリプトコンソールを提供しています。これらのスクリプトはGroovyで書かれていて、この ページ にそれらのサンプルがいくつかあります。
URLオプション
http://[jenkins-server]/[command]
ここで[command]は
Webユーザーは、Job Config Historyに移動してからXMLをエクスポートすることでエクスポートできます。
Jenkinsが動作しているマシンにアクセスできない状況で、バックアップとしてエクスポートしたいと考えています。
Webユーザーとしてxmlをインポートすることに関しては、私はまだ知りたいです。