0

Jenkins を使用して EC2 プロジェクトに継続的インテグレーションを追加し始めています。ビルドの実行後、仮想マシンにビルド アーティファクトをデプロイしています。

Jenkinsで維持する必要がある中間ファイルに問題があります。デプロイの実行中、グルー アント タスクは workspace/ フォルダーから実行されます。この時点で、この特定のビルド固有のいくつかの中間ファイルを作成する必要があります。

このファイルを維持する方法は? Jenkins のディレクトリ構造を認識しています。(これに関するジェンキンスのドキュメントへのリンク)

これらのファイルを builds/[BUILD_ID] フォルダーの下に作成する必要があります。

ただし、このフォルダーの絶対パスを取得する方法が見つかりません。(ただし、Jenkinsで利用可能なWORKSPACE変数から差し引くことができます)Jenkins Set Environment Variablesをすでに確認しました。

4

1 に答える 1

2

Jenkins は、ビルドごとにアーティファクトを保存できます。アーカイブするフォルダーを指定できます。(ただし、必要なすべてのアーティファクトを 1 つのフォルダーにコピーする方が簡単だと思います。この方法では、その 1 つのフォルダーを指定するだけで、何か不足していても心配する必要はありません。)

ビルドに基づいて展開するためにこれらのファイルが必要な場合は、それらをビルド アーティファクトとして Jenkins に保存します。これらは、ワークスペースのディレクトリ構造であるhttp://$JENKINS_URL/$JOB_NAME/$BUILD_NUMBER/artifact/...場所に保存されます。...たとえば、私は Java プロジェクトのすべてを以下のフォルダーの下にビルドしtarget、成果物をフォルダーの下に保存する傾向がありtarget/archiveます (単一のフォルダーの下にある場合、すべての成果物を簡単に保存できます) foo.txt。 URL は次のようになります。

http://$JENKINS_URL/$JOB_NAME/$BUILD_NUMBER/artifact/target/archive/foo.txt

wgetまたはを使用curlして、このアーティファクトをプルダウンできます。

Ant を使用している場合は、すべてのアーティファクトを 1 つの簡単に把握できるファイルに圧縮するか、tarball を作成することもできます。それが私がすることです。実際、私のtarget/archiveディレクトリには通常 3 つのファイルがあります。

  • デプロイに必要なすべてのアーティファクト (スクリプトと中間ファイルを含む) の zip ファイルまたは tarball。
  • DEPLOYMENT_DIRECTIONS.txt配置指示を含むと呼ばれるファイル。
  • というファイルdeploy.shが私の実際の展開ファイルです。

私のDEPLOYMNET_DIRECTIONS.txtファイルにはこれらの指示があります:

1). Log onto the Server

2). Execute the following curl command to download the deploy script:

    curl -o deploy.sh "@JENKINS_URL@job/@JOB_NAME@/@BUILD_NUMBER@/artifact/target/archive/deploy.sh"

    You may copy this and paste it right into the server where you're deploying.

3). Run the deploy.sh script.

    $ bash deploy.sh

私の中にbuild.xmlは次のようなものがあります:

    <copy todir="${archive.dir}">
        <fileset dir="${main.config.dir}">
            <include name="DEPLOYMENT_DIRECTIONS.txt"/>
            <include name="deploy.sh"/>
        </fileset>
        <filterset>
            <filter token="JOB_NAME"        value="${env.JOB_NAME}"/>
            <filter token="BUILD_NUMBER"    value="${env.BUILD_NUMBER}"/>
            <filter token="JENKINS_URL"     value="${env.JENKINS_URL}"/>
        </filterset>
    </copy>

は、変数を Jenkins 自体の環境変数に<filterset>置き換えます。@...@今、私のDEPLOYMENT_DIRECTIONS.txt見た目は次のとおりです。

1). Log onto the Server

2). Execute the following curl command to download the deploy script:

    curl -o deploy.sh "http://jenkins.vegicorp.com/jenkins/server_app/15/artifact/target/archive/deploy.sh"

    You may copy this and paste it right into the server where you're deploying.

3). Run the deploy.sh script.

    $ bash deploy.sh

その行は、サーバー上で #2 の方向からカット アンド ペーストできます。

いくつかのメモ:

  • 既存のファイルを上書きするため、curl代わりに使用します。このようにして、最新のものをダウンロードして、誰かが誤って以前のビルドから古いものを実行してしまうことを心配する必要はありません。wgetcurl -odeploy.shwgetdeploy.sh.2deploy.sh
  • base deploy.shパスについて心配する必要がなく、deploy.shシェルスクリプトで実行可能ビットを設定する必要がないためです。bash deploy.shを指定してから実行するよりも、使用するように人々に指示する方が簡単chmod u+xです./deploy.sh

お役に立てれば。

ちなみに、これは 3 つの異なるグループの快適さレベルで設計されています。

  • グループ #1 : デプロイが行われているマシンにログオンし、デプロイする特定のビルドを選択したいと考えています。これらのグループは、DEPLOYMENT_DIRECTIONS.txt手動でデプロイするビルドのファイルの 3 つの手順に従います。
  • グループ #2 : 彼らはデプロイするビルドを選択したいと考えていますが、サーバーにログインすることなく、Jenkins から直接これを行うことに満足しています。私はプロモート ビルド プラグインを使用して、ファイルの内容を自動化していDEPLOYMENT_DIRECTIONS.txtます。deploy.shダウンロードして実行するだけなので、とても簡単です。
  • グループ #3 : すべてのビルドを自動的にデプロイしたいと考えています。ビルドが成功するたびにプロモーションを実行するように、Promoted Build Plugin を変更するだけです。

お役に立てれば。

于 2013-12-11T01:50:21.557 に答える