web-dev-qa-db-ja.com

Gulp、Maven、Jenkins、統合テストまでのすべてのビルドパイプラインを整理する方法は?

私が持っているプロジェクトがあります:

  • やや興味深いビルドプロセスを持つJSクライアント。これには、CSSのコンパイル、JSとCSSのカテニングと縮小、HTMLの生成と処理、およびその他の手順が含まれます。 GruntやGulpのようなNodeツールはこれに最適です。
  • TomcatにデプロイされたWARであるJavaサーバー。これらのアセットとすべてのJavaコード。すべての種類のテストが含まれています。ユニットテスト、DAOをインスタンス化し、DBと通信する統合テスト、およびエンドツーエンドAPI Tomcatで実行されているアプリと実際に通信するテスト。
  • 分度器によるエンドツーエンドのテスト。よく知らない場合は、別のNode Seleniumをラップするツールです。

このプロセス全体を健全で堅牢な自動化された方法で整理するにはどうすればよいですか?

現時点で私が持っているのはGulpとMavenです。Mavenは基本的にプロセス全体を所有しています。

  1. Antrun(doh、3番目のビルドツール!)を使用してgenerate-sourcesでGulpアセット生成を呼び出します。
  2. 通常のJavaビルドを実行します。
  3. 事前統合テストで、私のWARでTomcatを起動します。
  4. Javaフェイルセーフプラグインを使用してTomcatと通信するE2Eテストを実行します。
  5. 今回は分度器テストを実行するために、antrunで再度Gulpを呼び出します。
  6. 統合後テストでTomcatをシャットダウンします。
  7. Verifyでテスト結果を検証することになっています。

その種の作品は、Mavenが一般的に非常に硬直していることを除いて、私はやりすぎだと感じています。 antrunを使用してGulpを呼び出すのはいトリックです。これらのステップ間の依存関係を制御し、結果を監視することは非常に困難です。同じフェーズで物事の順序を制御することは困難です。フェイルセーフ検証は、Gulpが生成する外部JUnitレポートファイルを処理しないようです。続けられた。

ビルドパイプラインまたはパラメーター化されたトリガーを使用して、ビルドサーバー(Jenkins)でもっとやるべきかどうか疑問に思います-しかし、私はそれをやったことがなく、それが本当に良いかどうかわかりません。

それでは、どのように実装しますか?

30
Konrad Garus

私の経験では、フロントエンドのMavenプラグインは、このタイプのビルド/デプロイプロセスに最適なプラグインです。 https://github.com/eirslett/frontend-maven-plugin これは私がGruntでそれを使用する方法ですが、Gulpも同様にサポートします。

<plugin>
    <groupId>com.github.eirslett</groupId>
    <artifactId>frontend-maven-plugin</artifactId>
    <version>...</version>

    <!-- optional -->
    <configuration>
        <workingDirectory>src/main/frontend</workingDirectory>
    </configuration>

   <execution>
    <id>grunt build</id>
    <goals>
        <goal>grunt</goal>
    </goals>

    <!-- optional: the default phase is "generate-resources" -->
    <phase>generate-resources</phase>

    <configuration>
        <!-- optional: if not specified, it will run Grunt's default
        task (and you can remove this whole <configuration> section.) -->
        <arguments>build</arguments>
    </configuration>
</execution>
</plugin>

知っておくべきことの1つは、実行中のシステムのノードをダウンロードすることです。したがって、ビルドサーバーに別のOSがある場合、バージョン管理にチェックインしたバージョンであることを確認する必要があります。ローカルバージョン(OSXの場合)は、プロジェクトに対してローカルに維持する必要があります。

31
am80l

私はある種の貧乏人のパイプラインを構築しようとします。

  1. Grunt/gulpに最初に作業を任せます(アセットの処理、フロントエンドテストの実行など-WARに含めるアーティファクトを準備します)。このステップが失敗すると、ビルド全体が失敗します(アセットの生成またはテスト)。

  2. 手順1で作成したアセットでWARファイルを生成する通常のMavenビルドを実行します。通常のWARファイルだけで独自のテストセットを実行します。うなり声/一口ものについて知る必要はありません。

次に、2つの場所があります。テストは実行されます(フロントエンド、grunt/gulpによって実行され、バックエンドはmavenによって実行されます)が、正しいレポーターを構成すると、CIサーバーがそれらのすべてを検出できます(TeamCityを使用して正常に処理します)。

少しスクリプトを作成すると、antrunを介してノードを複数回呼び出すよりも優れているはずです。または、mavenビルド内から最初のステップを実行できますが、制御が難しい場合があります。

1

このプロジェクトは約2年ですが、探しているものの多くを実行します。

https://github.com/pankajtandon/PointyPatient/blob/master/pointy-web/pom.xml

基本的にすべてのサブプロジェクトをWebからドメイン、レポジトリまで一緒に実行し、いずれか(JasmineまたはSpringMVCまたはSpringServicesテスト)が失敗すると失敗する親pomをチェックアウトします。また、サーバー側の展開にも戦争を引き起こします。

これは分度器でしたので、それは素晴らしい追加です。フロントエンドのMavenプラグインは、今では仕事のツールのように見えます。

HTHパンカジ

0
Pankaj Tandon

私はこれをスタブとして使用するつもりです。なぜなら、私は同様のことをしようとしてきたので、後で答えを充実させるために戻ってきます。それまでの間、 JHipster を検索する必要があります。彼らははるかに大きなスタックを持っており、彼らのスタックは既に構築されていますが、彼らは基本的にあなたが構築プロセス内であなたが望むと思うことをやっています。

私は彼らのビルドプロセスに完全に同意しませんが、私が現在取り組んでいるプロジェクトで私が何をしているのか、何をしているのかを説明するために戻ります。

0
Henry B