Travis CI でビルドステージを使用する

開発

ビルドステージとは、ジョブをグループ化し、ステージ内のジョブが終わってから次のステージに進むようなビルドを行うための仕組みです。

Travis CI Documentation
Build Stages

動作確認用のリポジトリ

technote-space/test-travis
Sample plugin for testing with Travis CI. Contribute to technote-space/test-travis development by creating an account on GitHub.

基本的な使用方法

ステージの順番定義

stages:
  - check
  - test
  - deploy

stages に定義したものが上から順に実行されます。

ステージごとに実行条件を与えたい場合

stages:
  - check
  - name: test
    if: branch = master and tag IS blank and type IN (pull_request, api)
  - name: deploy
    if: tag IS present

if を使用して条件を設定することが可能です。

Travis CI Documentation
Build Stages

上の例では master へのプルリクの時にテストを行い、タグがプッシュされたときにデプロイを行います。

ジョブの定義

jobs:
  include:
    - stage: check
      language: php
      php: '7.2'
      script: php/check.sh
    - stage: check
      language: node_js
      node_js: '11'
      dist: trusty
      script: node_js/check.sh

    - stage: test
      language: php
      php: '7.2'
      script: php/test.sh
    - stage: test
      language: node_js
      node_js: '11'
      dist: trusty
      script: node_js/test.sh

    - stage: deploy
      language: node_js
      node_js: '11'
      script: skip
      before_script: bin/before_deploy.sh
      deploy:
        provider: release
        skip_cleanup: true
        name: ${TRAVIS_TAG}
        api_key:
          secure: .........
        file: ${RELEASE_FILE}
        overwrite: true
        on:
          tags: true
    - stage: deploy
      language: node_js
      node_js: '11'
      dist: trusty
      script: skip
      deploy:
        provider: script
        script: bash bin/release.sh
        on:
          tags: true

jobs.include にジョブを定義します。

stage には前述の stages に設定したものを指定します。

それぞれのジョブで異なる言語、環境変数などを利用することができるため、非常に自由度が高いです。

deploy も通常のものと同じように記述することができます。

Travis CI Documentation
Deployment

ステージ内のすべてのジョブが完了してから次のステージに進みます。

例:構文チェックステージが完了してからテストステージに進む

結果

無料だと3つのジョブまで並行して実行されます。

しかし下のスクショでは、Checkステージが終わっていないため1つ枠が空いているにもかかわらず次のTestステージのジョブは開始されません。

Checkステージのジョブがすべて完了するとTestステージのジョブが実行されます。

コメント

タイトルとURLをコピーしました