Travis CIでビルドパイプラインを作成する

Travis CIを使用してビルドパイプラインを作成する

1. 前書き

最近のソフトウェア開発では、pipelineという用語がよく使われます。 しかし、それは何ですか?

一般的に言えば、a build pipeline is a set of automated steps that move code from development to production

ビルドパイプラインは、ソフトウェアの継続的な統合ワークフローの実装に最適です。 バグをより早く見つけてその影響を減らすことを目的として、build smaller changes with greater frequencyを実行できます。

このチュートリアルでは、Travis CIを使用して単純なビルドパイプラインを構築する方法を見ていきます。

2. ビルドパイプラインの手順

ビルドパイプラインは多くの異なる手順で構成できますが、少なくとも、次のものを含める必要があります。

  • Compiling code:この場合、Javaソースコードをクラスファイルにコンパイルすることを意味します

  • Executing tests:単体テストや場合によっては統合テストの実行など

  • Deploying artifacts:コンパイルされたコードをアーティファクト、たとえばjarファイルにパッケージ化し、それらをデプロイします

アプリケーションが異なるテクノロジーを使用している場合は、additional steps can be included in the build pipeline。 たとえば、JavaScriptファイルを縮小したり、更新されたAPIドキュメントを公開したりする追加のステップがある場合があります。

3. Travis CIとは何ですか?

サンプルビルドパイプラインでは、Travis CI, a cloud-based continuous integration toolを使用します。

これには、ビルドパイプラインを開始するための優れた選択肢となる多くの機能があります。

  • パブリックGitHubリポジトリと迅速に統合

  • すべての主要なプログラミング言語をサポート

  • 複数の異なるクラウドプラットフォームに展開

  • さまざまなメッセージングおよび警告ツールを提供

高レベルでは、GitHubリポジトリを監視して新しいコミットを検出します。

新しいコミットが行われると、構成ファイルで定義されているビルドパイプラインのステップが実行されます(これについては以下で詳しく説明します)。 いずれかのステップが失敗した場合、パイプラインは終了し、通知されます。

すぐに使用できるTravis CIの設定はほとんど必要ありません。 The only required configuration is specifying the programming language

必要に応じて、パイプラインを調整するための構成をいつでも提供できます。 たとえば、ビルドをトリガーするブランチを制限したり、パイプラインに追加のステップを追加したりできます。

3.1. 無料版と有料版

Travis CIには現在、無料バージョンと有料バージョンの2つのサービスがあることを知っておくことが重要です。

.orgドメイン名で示される無料バージョンは、全機能for any public GitHub repositoryを提供します。 ビルドまたはリポジトリの数に制限はありませんが、パイプラインの実行時にリソース制限が課せられます。

プライベートGitHubリポジトリには、.comドメイン名を使用する有料バージョンが必要です。 また、無料プランと比較して、より多くの同時ビルドと無制限のビルド時間を提供します。 有料版をテストするために、最初の100ビルドの無料試用版があります。

4. Travis CIを使用したビルドパイプラインの作成

このチュートリアルでは、上記の無料バージョンを使用します。 任意のパブリックリポジトリを使用して、無料のパイプラインを作成できます。

私たちがしなければならないことは、GitHubアカウントでTravis CIにログインし、それを認証することです:

image

GitHubアカウントに権限を付与したら、ビルドパイプラインの構成を開始する準備が整います。

4.1. リポジトリの構成

最初は、すべての公開リポジトリは非アクティブと見なされます。 これを解決するには、we need to enable our repository from the account settings page

これには、すべての公開リポジトリとトグルボタンがリストされます。 トグルボタンをクリックすると、master:のデフォルトブランチを使用して、新しいコミットについてそのリポジトリの監視を開始するようにTravisCIが構成されます。

image

各リポジトリにはSettingsボタンもあることに注意してください。 ここで、さまざまなパイプラインの動作を構成できます。

  • パイプラインをトリガーするイベント(プッシュ、プルリクエストなど)を定義する

  • パイプラインに渡される環境変数を設定します

  • 新しいイベントがトリガーされるとビルドが自動キャンセルされます

このチュートリアルでは、デフォルト設定で問題なく動作します。 後で、デフォルトの動作の一部をオーバーライドする方法を説明します。

4.2. Travis設定の作成

次のステップは、リポジトリのルートディレクトリに.travis.ymlという名前の新しいファイルを作成することです。 このファイルには、パイプラインの構成に必要なすべての情報が含まれています。 Without this file, the pipeline will not execute

このチュートリアルでは、プログラミング言語を指定する最低限の構成を含める必要があります。

language: java

それでおしまい! これ以上情報を提供することなく、Travis CIは次の簡単なパイプラインを実行します。

  • ソースコードをコンパイルします

  • テストを実行します

.travis.ymlファイルをコミットすると、Travisは最初のビルドを開始します。 masterブランチにさらにコミットすると、追加のビルドがトリガーされます。 また、ダッシュボードを使用すると、コミットまたはプルリクエストを必要とせずに、いつでも手動でパイプラインをトリガーできます。

5. 追加の構成

前のセクションでは、ビルドパイプラインを実行するために必要な構成は1行だけであることがわかりました。 ただし、ほとんどのプロジェクトでは、意味のあるパイプラインを実装するために追加の構成が必要になります。

このセクションでは、パイプラインに追加する可能性のある、より便利な構成のいくつかを概説します。

5.1. デフォルトのビルドコマンドの変更

Mavenプロジェクトのビルドに使用されるデフォルトのコマンドは次のとおりです。

mvn test -B

.travis.ymlscriptディレクティブを設定することで、これを任意のコマンドに変更できます。

script: mvn package -DskipTests

&&演算子を使用して、複数のコマンドを1つのscript行にチェーンすることができます。

一部のビルドコマンドは複雑で、複数の行にまたがったり、複雑なロジックを持つことがあります。 たとえば、環境変数に基づいて異なるアクションを実行する場合があります。

In these cases, it’s recommended to place the build command in a stand-alone script、および構成ファイル内からそのスクリプトを呼び出します。

script: ./build.sh

5.2. コードの展開

Javaプロジェクトのデフォルトのビルド設定は、コードをコンパイルしてテストを実行するだけです。 結果のアーティファクト(.jarファイルなど)は、どこかにデプロイしない限り、パイプラインの最後で破棄されます。

Travis CIは、さまざまな有名なサードパーティサービスをサポートしています。 アーティファクトは、Amazon S3、Google Cloud Storage、Bintrayなど、多くの一般的なクラウドストレージシステムにコピーできます。

AWS、Google App Engine、Herokuなどのdeploy code directly to most popular cloud computing platformsも使用できます。

以下は、Herokuにデプロイする方法を示す構成例です。 暗号化されたプロパティを生成するには、Travis CLI toolを使用する必要があります。

deploy:
  provider: heroku
  api_key:
    secure: "ENCRYPTED_API_KEY"

さらに、独自の展開スクリプトを作成できる汎用的な展開オプションを提供します。 これは、ネイティブにサポートされていないサードパーティシステムにアーティファクトを展開する必要がある場合に役立ちます。

たとえば、アーティファクトをプライベートFTPサーバーに安全にコピーするシェルスクリプトを作成できます。

deploy:
  provider: script
  script: bash ./custom-deploy.sh

5.3. パイプラインをトリガーするブランチの管理

デフォルトでは、パイプラインはmasterのすべてのコミットに対して実行されます。 ただし、ほとんどの大規模プロジェクトでは、何らかの形のgit分岐を使用して開発サイクルを管理しています。

Travis CI supports both white and blacklisting of git branchesは、どのコミットがパイプラインをトリガーするかを決定します。

例として、次の構成を検討してください。

branches:
  only:
  - release
  - stable
  except:
  - master
  - nightly

これは、masterおよびnightlyブランチでのコミットを無視します。 releaseおよびstableブランチへのコミットは、パイプラインをトリガーします。 onlyディレクティブは常にexceptディレクティブよりも優先されることに注意してください。

正規表現を使用して、パイプラインをトリガーするブランチを制御することもできます。

branches:
  only:
  - /^development.*$/

これにより、developmentで始まるブランチでのコミットに対してのみパイプラインが開始されます。

5.4. 特定のコミットをスキップする

We can use the git commit message to skip individual commits。 Travis CIは、次のパターンについてメッセージを調べます。

  • をスキップ

  • スキップ

ここで、は次の値のいずれかです。

  • ci

  • トラビス

  • トラビスci

  • travis-ci

  • トラビスチ

コミットメッセージがこれらのパターンのいずれかに一致する場合、パイプラインは実行されません。

5.5. 異なるビルド環境を使用する

Javaプロジェクトのデフォルトのビルド環境はUbuntu Linuxです。 パイプラインは、次の構成を.travis.ymlに追加することにより、MacOSXまたはWindowsServerでも実行できます。

os: osx # can also be 'windows'

Linuxでも、選択できる3つの異なるディストリビューションがあります。

os: linux
  dist: xenial # other choices are 'trusty' or 'precise'

build platform documentationは、利用可能なすべての環境とその違いをカバーしています。

プラットフォームを変更する場合は、互換性を確保するために、カスタムのbuildまたはdeployスクリプトも変更する必要がある場合があることを覚えておいてください。 構成でhandle multiple operating systemsを実行するには、いくつかの方法があります。

5.6. 異なるJDKバージョンの使用

.travis.ymlファイルで次の構成を設定することにより、JDKの特定のバージョンに対してテストすることもできます。

jdk: oraclejdk8

異なるLinuxディストリビューションであっても、異なるビルド環境では異なるJDKバージョンを使用できることに注意してください。 JDKバージョンの完全なリストを確認するには、各環境のドキュメントを参照してください。

6. 行列の作成

デフォルトでは、パイプラインが実行されるたびに、単一のジョブとして実行されます。 つまり、パイプラインのすべてのフェーズは、同じ設定で単一の仮想マシン上で順番に実行されます。

しかし、Travis CIの優れた機能の1つは、ビルドマトリックスを作成できることです。 これにより、以前に見た設定のいくつかに異なる値を使用して、コミットごとに複数のジョブを実行できます。

たとえば、ビルドマトリックスを使用して、LinuxとMac OSXの両方、またはJDK 8と9の両方でパイプラインを実行できます。

There are two ways to create build matrices。 まず、前に見た1つ以上の言語および環境構成のwe can provide an array of values。 例えば:

language: java
jdk:
  - openjdk8
  - openjdk9
os:
  - linux
  - osx

このアプローチを使用して、Travis CIは構成のすべての組み合わせを自動的に拡張し、複数のジョブを形成します。 上記の例では、結果は合計4つのジョブになります。

The second way to create a build matrix is to use the matrix.include directive。 これにより、実行する組み合わせを明示的に宣言できます。

language: java
matrix:
  include:
  - jdk: openjdk8
    os: linux
  - jdk: openjdk9
    os: osx

上記の例では、2つのジョブが発生します。

繰り返しになりますが、複数のオペレーティングシステムで構築する場合は、buildおよびdeploymentスクリプトがすべての場合に機能するように注意する必要があります。 たとえば、Windowsではシェルスクリプトは機能しません。 適切な条件ステートメントを使用して、異なるオペレーティングシステムを処理する必要があります。

作成するジョブと障害の処理方法をよりきめ細かく制御できるmore optionsがあります。

7. 結論

この記事では、Travis CIを使用して簡単なビルドパイプラインを作成しました。 ほとんどすぐに使用できる構成を使用して、コードをビルドし、テストを実行するパイプラインを作成しました。

また、Travis CIがどのように設定可能であるかを示す小さなサンプルも確認しました。 さまざまなプログラミング言語とサードパーティのクラウドプラットフォームで動作します。 1つの欠点は、現在GitHubリポジトリでのみ機能することです。