JenkinsをPC間で移動する方法


154

現在、開発用PCでJenkinsを使用しています。このツールの知識が限られていたため、開発用PCにインストールしました。開発用PCでテストしました。今、私は、ビルドプロセスにおける長期的な「パートナー」としてのJenkinsに満足しており、このJenkinsを専用サーバーに「移動」したいと考えています。

この前に、いくつかのビルドを実行し、各ビルドからアーティファクトをアーカイブしました。特に、ビルド番号はバージョン管理のために私にとって非常に重要です。

現在のPCから新しいサーバーにすべてのJenkins情報をエクスポートするにはどうすればよいですか?


6
私はこれをやった。セドリックジュリアンの回答の手順に従いましたが、Windowsで、移動後にJenkinsが正常に起動する前に、修復インストールを実行する必要があることがわかりました。修復後、すべて正常です。
Smurph269 2013年

回答:


175

Jenkins wikiに従って、次のことを行う必要があります。

  • 新しいサーバーに新しいJenkinsインスタンスをインストールする
  • 新旧のJenkinsインスタンスが停止していることを確認してください
  • 古いJenkinsインスタンスのJENKINS_HOMEのすべてのコンテンツをアーカイブします
  • アーカイブを新しいJENKINS_HOMEディレクトリに抽出します
  • 新しいJenkinsインスタンスを起動します
  • Jenkinsの新しいインスタンスへのドキュメント/リンクを変更することを忘れないでください:)
  • 新しいJenkinsファイルの所有者を変更することを忘れないでください: chown -R jenkins:jenkins $JENKINS_HOME

JENKINS_HOMEはデフォルト~/.jenkinsではLinuxインストールにありますが、その場所を正確に見つけるには、http:// your_jenkins_url / configureページに移動して、最初のパラメーターの値を確認しますHome directory。これはJENKINS_HOMEです。


1
新しいジェンキンを起動すると、ノードが表示されていますが、これは正しいです。スレーブコマンドラインから実行:のjavawsしかし、私はいくつかのノード上のURLがクリックされたときには、以下のように古いジェンキンスを指している古いジェンキンスサーバ:8080 /コンピュータ/ slaveMachine1 /スレーブagent.jnlpまたはスレーブは、ヘッドレスの場合:Javaの-jar slave.jar -jnlpUrl old-jenkins-server:8080 / computer / slaveMachine1 / slave-agent.jnlp 次に、すべてのノードのこれらのURLがnew-jenkins-serverを指すようにするにはどうすればよいですか?
merlachandra 2013

13
以前のコメントで述べた私の問題の解決策を得た:Goto Manage Jenkins> configure system。ここの「Jenkinsの場所」セクションの「Jenkins URL」フィールドで、URLを変更して新しいjenkinsサーバーを指すようにします。
merlachandra 2013

3
隠しフォルダもコピーしてください!
mohi

7
「ジェンキンスの新しいインスタンスへのドキュメント/リンクを変更することを忘れないでください」のハハ+1
Iain Smith

2
正しいファイルのアクセス許可と所有権に問題があり、それを修正するために、次のdocker
marcinj

53

JENKINS_HOMEディレクトリが大きすぎてコピーできない場合、同じジョブ、Jenkinsプラグイン、およびJenkins構成をセットアップするだけで済み(古いジョブアーティファクトやレポートは不要)、ThinBackupプラグインを使用できます。

  1. ソースとターゲットの両方のJenkinsサーバーにThinBackupをインストールする
  2. 両方でバックアップディレクトリを構成します(Jenkinsの管理-> ThinBackup->設定)

  3. SourseでJenkinsはThinBackup->今すぐバックアップに移動します

  4. JenkinsソースバックアップディレクトリからJenkinsターゲットバックアップディレクトリにコピーする
  5. ターゲットのJenkinsでThinBackup-> Restoreに移動し、Jenkinsサービスを再起動します。
  6. 不足しているプラ​​グインまたはジョブがある場合は、バックアップコンテンツをターゲットのJENKINS_HOMEに直接コピーします。

  7. ソースJenkinsでユーザー認証があり、ターゲットJenkinsでロックアウトされている場合は、Jenkins config.xmlを編集<useSecurity>し、falseに設定して、Jenkinsを再起動します。


2
JENKINS_HOMEディレクトリが大きすぎてコピーできないのはなぜですか?どのようなサイズについて話しているのですか?
wotanii 2016年

9
私jenkins_homeは100GBのですかそこら、いけないは、その大部分は捨てるものとして、新しいサーバーにそれをコピーしたい
user230910

3
私のJenkins_homeは〜4TBなので、構成のみを保持し、ビルド履歴や/ usercontentをまったく含まないシンコピーは役に立ちます。
VolleyJosh

すごい、プラグイン...本当に多くの時間を節約できました... 100 GBを処理するのは簡単な仕事ではありません
Swapnil Kotwal

11

これは私にとってUbuntu 12.04(Jenkins ver。1.628)からUbuntu 16.04(Jenkins ver。1.651.2)に移行するのに役立ちました。最初にリポジトリからJenkinsをインストールしました

  1. 両方のJenkinsサーバーを停止する
  2. JENKINS_HOME古いサーバーから新しいサーバーに(/ var / lib / jenkinsなど)をコピーします。新しいサーバーのコンソールから:

    rsync -av username@old-server-IP:/var/lib/jenkins/ /var/lib/jenkins/

  3. 新しいJenkinsサーバーを起動します

これは必要ないかもしれませんが、私はしなければなりませんでした

  • Manage JenkinsReload Configuration from Disk
  • すべてのスレーブを切断し、再度接続します。
  • Configure System > Jenkins Locationで、Jenkins URLが新しいJenkinsサーバーに正しく割り当てられていることを確認します。

新しいJenkinsは古いバージョンと同じバージョンでしたか?
Jakub Czaplicki 2016年

@JakubCzaplicki-両方のJenkinsは1.6でしたが、まったく同じバージョンではありませんでした。回答を更新しました。次にUbuntu 16.04をJenkins 2.6に更新して、jenkins.warファイルを置き換えました。stackoverflow.com/questions/11062335/...
Katu

上記を行って訪問した後、/configureSecurity私は得るjava.lang.AssertionError: InstanceIdentity is missing its singleton
maxisme

@maxisme、遅くなりましたが、このスレッドは、あなたが言及した問題がJavaバージョンに関連していることを示唆しています。issues.jenkins-ci.org/browse/JENKINS-46182
Katu

1

Jenkins Server Automation:

ステップ1:

Jenkinsホーム(ジョブ、構成、プラグインなど)をGitLabローカルリポジトリまたはGitHubプライベートリポジトリに保存するリポジトリを設定し、Jenkinsジョブ、プラグインなどに新しい変更をプッシュすることで定期的に更新します。

ステップ2:

新しいJenkinsサーバーを起動するために使用できるJenkinsのPuppetホストグループ/ロールを構成します。Puppetレシピですべての基本設定を行い、Jenkinsの最新バージョンをインストールし、の個別のディレクトリ/マウントをセットアップすることを確認しますJENKINS_HOME

ステップ3:

上記のJenkins-puppet構成を使用して新しいマシンを起動します。すべてがインストールされたら、GitリポジトリからJenkins構成を取得/クローンして、Jenkinsホームディレクトリに移動し、Jenkinsを再起動します。

ステップ4:

JenkinsのURL、Jenkinsの管理プラグインの管理に移動し、更新が必要なすべてのプラグインを更新します。

できた

Docker SwarmまたはKubernetesを使用して、スレーブノードを自動スケーリングできます。


1

場合によっては、Jenkinsマシンにアクセスして、フォルダを別のJenkinsインスタンスに直接コピーできないことがあります。そこで、Jenkins REST API呼び出しを使用してプラグインとジョブを1つのJenkinsインスタンスから別のJenkinsインスタンスにインストールするメニュー方式のユーティリティを作成しました。

プラグインの移行の場合:

  1. GETリクエスト:{SOURCE_JENKINS_SERVER}/pluginManager/api/json?depth=1バージョンとともにインストールされているプラ​​グインのリストを取得します。
  2. これらのプラグインをインストールするには、次のパラメーターを指定してPOSTリクエストを送信します。

    final_url=`{DESTINATION_JENKINS_SERVER}/pluginManager/installNecessaryPlugins`
    
    data=`<jenkins><install plugin="{PLUGIN_NAME}@latest"/></jenkins>` (where, latest will fetch the latest version of the plugin_name)
    
    auth=`(destination_jenkins_username, destination_jenkins_password)`
    
    header=`{crumb_field:crumb_value,"Content-Type":"application/xml”}` (where crumb_field=Jenkins-Crumb and get crumb value using API call {DESTINATION_JENKINS_SERVER}/crumbIssuer/api/json
    

ジョブの移行の場合:

  1. REST呼び出しを使用して、{SOURCE_JENKINS_URL}にインストールされているジョブのリストを取得できます。 {SOURCE_JENKINS_URL}/view/All/api/json
  2. 次に、ジョブのURLを使用して、{SOURCE_JENKINS_URL}のジョブから各ジョブのconfig.xmlファイルを取得できます{SOURCE_JENKINS_URL}/job/{JOB_NAME}
  3. このconfig.xmlファイルを使用して、{DESTINATION_JENKINS_URL}でXMLファイルのコンテンツをPOSTすると、{DESTINATION_JENKINS_URL}でジョブが作成されます。

プラグインまたはJenkinsの移行を開始するようにユーザーに要求し、Jenkins REST API呼び出しを使用して実行するメニュー駆動型のユーティリティをPythonで作成しました。

このURLからJenkinsMigration.docxを参照できます


このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.