2015-10-30 21 views
44

私はLinuxでホストされているGitlabを実行していて、CI機能を頭に入れようとしています。Gitlab CIを使ってJava Mavenプロジェクトを構築するにはどうすればいいですか?

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

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

答えて

4

ドキュメントを制御するために使用YAML構文ビルド説明:

をですから、次のように起動してみませんなぜ?:

job1: 
    script: "mvn package" 

おそらく、このMavenが既にインストールされている場合にのみ動作しますので、これをサポートするrunnerが必要です。

私はGitLabを使用していませんが、documentationは、それをさらにカスタマイズしてofficial Maven Docker imageを使用してビルドを実行できることを示唆しています。非常に興味深いですが、ドキュメントにはJavaの例がないと思います。

43

Register a Docker runnerofficial Maven Docker imagesのいずれかを使用し、例えば、あなたの.gitlab-ci.ymlファイル内maven:3-jdk7

image: maven:3-jdk-7 

build: 
    script: "mvn install -B" 

は、非対話型の使用をお勧めし-Bflagを、注意してください。

私が理解する限り、ランナーが共有されているかどうかは関係ありません。

+0

ランナーを登録しているときにシェル、ssh、ドッカーを実行するかどうか尋ねられたら、ドッカーを正しく選択する必要がありますか? – MRK187

+0

Thx、チャームのように機能します!ちょうど質問です: '.gitlab-ci.yml'ファイルに画像を指定すると、' gitlab-runner'の作成中に指定された画像は無視されますか?例えばimage * ubuntu:latest *を使ってランナーを作って、ymlファイル内の* maven:3-jdk-7 *を使ってジョブを実行してください。 – PierreF

+1

@jeanMarcAssinこのセクションに関するドキュメンテーションは少し疎ですが、このセクションはhttp:// docです。 gitlab.com/ce/ci/docker/using_docker_images.html#overwrite-image-and-services以下の2つは、 '.gitlab-ci.yml'ファイルで指定したイメージが、イメージをランナーに上書きすることを示唆していますで構成されています。 – rolve

2

私は、このコマンドを使用しますが、一般的にJavaの/ Mavenの上のドキュメントのビルドは、私がここにみんなの情報のビットを追加したい非常にまれ

maven-package: 
    script: "mvn install -B" 
3

です。まず、共有している特定のランナーに関するいくつかの混乱を解消しましょう。

共有ランナー: その名の音として、共有ランナーはオプションが有効になって可共有ランナーを持つあなたのインストールgitlabインスタンス内のすべての単一のプロジェクトのジョブを実行するために使用することができ、ビルド・プロセス・フロー・インスタンスです。そのコースを行うには、管理者権限が必要です。現在のgitlabのドキュメントでは、管理者権限での使用のみが共有ランナーを定義することができます。

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

また、ランナーをプロジェクトに選択する際に注意する重要な点はほとんどありません。

  1. 共有ランナーは、複数のプロジェクト間、同様の要件を持って仕事に便利です。複数のランナーを多くのプロジェクトでアイドリングさせるのではなく、複数のプロジェクトを処理するランナーを1人または少数しか配置することはできません。これにより、一般的なプロジェクトのランナーの管理と更新が容易になります。
  2. 特定のランナーは、特別な要件を持つジョブまたは特定の需要のプロジェクトのジョブに役立ちます。ジョブに特定の要件がある場合は、これを念頭に置いて特定のランナーを設定し、すべてのランナーに対してこれを行う必要はありません。たとえば、特定のプロジェクトを展開する場合は、特定のランナーがこれに適した資格を持つように設定できます。

プロジェクトの右の実行者を選択するには、gitlabランナーの利用可能なすべてのエグゼキュータのバードビューが非常に重要です。 Gitlabは、here以上の素敵な文書を提供することで、この仕事を容易にしてくれました。

あなたがランナーと異なる執行についての詳細をお知りになりたい場合は、私はあなたがこの記事を始めることをお勧め、 Gitlab Runner

1

私はGitlab CI上で、当社のJavaプロジェクトを設定しようとしてかなりの時間を費やしました。ある程度の成功を収めています。 rolveが述べたように、最も単純な解決策は、公式レポからの画像を使用することです。https://hub.docker.com/_/maven

しかし、プロジェクトの依存関係を取得するときに私のビルドがタイムアウト要求を受ける原因となったプロキシがあります。私は多くのソリューションを試して、最終的にこの投稿に出くわしました:https://gitlab.com/gitlab-org/gitlab-ce/issues/15167

投稿自体は、ダウンロードされた依存関係をビルド間でアクセスできるローカルリポジトリにキャッシュするよう設定しています。あなたのキャッシュディレクトリとあなたのプロキシを設定するには、.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ジョブは、ターゲットディレクトリに生成されたものを表示することです。

+0

答えはありますか?与えられた質問のために。 –

+0

私は私のすべてのプロジェクトに使用しようとしている汎用的なソリューションで私の答えを更新しました。 – UltimaWeapon