web-dev-qa-db-ja.com

Gitlab CIを使用してJava Mavenプロジェクトをビルドする方法

私は何の成功もなしに実験してきましたが、LinuxでホストされているGitlabを実行しており、CI機能を回避しようとしています。

Gitlabのドキュメントによると、Trvis-CIのGitlab実装である.gitlab-ci.ymlファイルを作成するだけです。今ではその外観から.gitlab-ci.ymlで多くのことを達成できますが、多くのドキュメントはRubyおよび他の言語を参照しています。 Java Mavenプロジェクトのビルド方法については何も言われていません。

Javaで簡単なアプリケーションを構築するにはどうすればよいですか?共有ランナーを使用できますか、または特定のランナーを使用する必要がありますか?その場合、どのランナー実装を選択する必要がありますか:ssh、docker、またはshell?それでは、少なくともMavenでプロジェクトをビルドするために、.gitlab-ci.ymlファイルに何を入れるべきですか?

58
MRK187

Dockerランナーの登録 および 公式のMaven Dockerイメージ のいずれかを使用します。たとえば、maven:3-jdk7ファイルの.gitlab-ci.yml

image: maven:3-jdk-7

build:
  script: "mvn install -B"

-Bflag に注意してください。これは非インタラクティブな使用に推奨されます。

私が理解している限りでは、ランナーが共有されているか特定であるかは問題ではありません。

55
rolve

ここに少し情報を追加したいと思います。最初に、共有された特定のランナーに関する混乱を明確にしましょう。

Shared Runner:その名前の通り、共有ランナーはビルドプロセスフローインスタンスであり、インストールされたgitlabインスタンス内のすべてのプロジェクトのジョブを実行するために使用できますAllowed Shared runnersオプションが有効になっています。もちろん、そのためには管理者権限が必要です。現在のgitlabのドキュメントによると、管理者権限でのみ使用して共有ランナーを定義できます。

specific runnerこの種のランナーは、1つのプロジェクトのジョブのみを実行します。

また、これらは、プロジェクトのランナーを選択する際に留意すべきいくつかの重要なポイントです。

  1. Shared Runnersは、複数のプロジェクト間で同様の要件を持つジョブに役立ちます。多くのプロジェクトで複数のランナーがアイドリングするのではなく、複数のプロジェクトを処理する単一または少数のランナーを使用できます。これにより、プロジェクトの共通セットのランナーの保守と更新が容易になります。
  2. 特定のランナーは、特別な要件があるジョブや、特定の需要があるプロジェクトに役立ちます。ジョブに特定の要件がある場合、これを念頭に置いて特定のランナーを設定できますが、すべてのランナーに対してこれを行う必要はありません。たとえば、特定のプロジェクトを展開する場合は、特定のランナーをセットアップして、そのための適切な資格情報を取得できます。

ここで、プロジェクトに適切なエグゼキューターを選択するには、gitlabランナーで利用可能なすべてのエグゼキューターを鳥瞰することが非常に重要です。 Gitlabは here でニースのドキュメントを提供することにより、この仕事を簡単にしました。

ランナーとさまざまなエグゼキューターについて詳しく知りたい場合は、この記事から始めることをお勧めします Gitlab Runner

5
Milan Savaliya

Gitlab CIでJavaプロジェクトをセットアップしようとしてかなりの時間を費やしました。ある程度の成功を収めて機能しました。 rolveが述べたように、最も簡単な解決策は公式リポジトリの画像を使用することです: https://hub.docker.com/_/maven

ただし、プロジェクトの依存関係を取得するときにビルドがタイムアウト要求を取得する原因となった企業プロキシがあります。私は多くの解決策を試し、最終的にこの投稿に出会いました: https://gitlab.com/gitlab-org/gitlab-ce/issues/15167

投稿自体は、ビルド間でアクセスできるローカルリポジトリにダウンロードされた依存関係をキャッシュするようにMavenをセットアップすることに関するものです。考えは、in。gitlab-ci.ymlでローカルMaven構成ファイルを記述して、キャッシュディレクトリとプロキシをセットアップできるということです。

before_script:
  -echo '<settings
          xmlns="http://maven.Apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.Apache.org/SETTINGS/1.0.0
          https://maven.Apache.org/xsd/settings-1.0.0.xsd">
          <localRepository>/cache/.m2</localRepository>
          <proxies>
              <proxy>
                  <active>true</active>
                  <protocol>'$PROXY_PROTOCOL'</protocol>
                  <Host>'$PROXY_Host'</Host>
                  <port>'$PROXY_PORT'</port>
              </proxy>
          </proxies>
      </settings>' > $HOME/.m2/settings.xml

build_debug1:
  stage: build
  script: "echo $PROXY_Host"

build_debug2:
  stage: build
  script: "cat $HOME/.m2/settings.xml"

build_maven:
  stage: build
  script: "mvn $MAVEN_CLI_OPTS package"
  artifacts:
    paths:
      - target/*.jar

deploy_debug1:
  stage: package
  script: "ls target/"

ビルドデバッグジョブは、プロキシ設定が正しく挿入されているかどうかを確認するだけであることに注意してください。 Project-> Settings-> CI/CD Pipelines-> Secret Variablesに移動して、Gitlabを使用してプロキシ環境変数をシークレットとして設定できます。

最後のdeploy_debugジョブは、ターゲットディレクトリで生成されたものを確認することです。

4
UltimaWeapon

ドキュメントでは、ビルドの制御に使用されるYAML構文について説明しています。

では、次のことから始めてみませんか?:

job1:
  script: "mvn package"

おそらく、これはMavenが既にインストールされている場合にのみ機能するため、これをサポートする runner が必要になります。

GitLabは使用していませんが、 ドキュメント は、ビルドを実行するために 公式Maven Dockerイメージ を使用するようにさらにカスタマイズできることを示唆しています。非常に興味深いように見えますが、ドキュメントにJavaの例が欠けていることに同意します。

4
Mark O'Connor

私はこのコマンドを使用しますが、一般的にJava/mavenビルドのドキュメントは非常にまれです

maven-package:
  script: "mvn install -B"
2
emeraldjava