{before _、} {install、script} .travis.ymlオプションの違いは何ですか?


81

内部の.travis.yml間の実用的な違いは何か設定ファイルbefore_installinstallbefore_scriptおよびscriptオプション?

これらのオプションの違いを説明するドキュメントは見つかりませんでした。


あなたはここを見ましたか?docs.travis-ci.com/user/customizing-the-build
nos

20
はい、および「エラーが発生した」と「失敗した」との違いを除いて、そことの間の差である何のために何の説明ではないbefore_installinstallbefore_script
ダニエレオーランド

回答:


74

これらのセクションを使用する必要はありませんが、使用する場合は、実行していることの意図を伝えます。

before_install:
  # execute all of the commands which need to be executed 
  # before installing dependencies
  - composer self-update
  - composer validate

install:
  # install all of the dependencies you need here
  - composer install --prefer-dist

before_script:
  # execute all of the commands which need to be executed 
  # before running actual tests
  - mysql -u root -e 'CREATE DATABASE test'
  - bin/doctrine-migrations migrations:migrate

script:
  # execute all of the commands which 
  # should make the build pass or fail
  - vendor/bin/phpunit
  - vendor/bin/php-cs-fixer fix --verbose --diff --dry-run

たとえば、https://github.com/localheinz/composer-normalize/blob/0.8.0/.travis.ymlを参照してください


2
docs.travis-ci.com/user/dockerで、docker buildコマンドがbefore_installステップに入れられる理由がまだわかりません。それはinstall歩調を合わせるべきではありませんか?
Pahlevi Fikri Auliya 2017

@PahleviFikriAuliya例のコンテキストで理解している限りdocker build、テスト環境のセットアップに使用されます-依存関係をインストールする前に必要な場合は、これをbefore_installセクションに移動するのが理にかなっています。そうでない場合は、before_scriptセクションがより適切になります。docs.travis-ci.com/user/languages/ruby/#Bundlerを見ると、依存関係をインストールするためにdockerは必要ないはずだと理解しています。
localheinz 2017

23

違いは、何かがうまくいかないときの仕事の状態にあります。

Gitの2.17(Q2 2018)には、ことを示して3c93b82コミットすることにより(2018年1月8日)(SZEDERガーボルをszeder
(による合併Junio C浜野- gitster-c710d18をコミットし、2018年3月8日)

すなわち間の実用的な違いを示しbefore_installinstallbefore_script及びscriptオプション

travis-ci: ' script'フェーズでGitをビルドする

我々はトラヴィスCI上のGitを構築し、テストを開始して以来(522354d:、トラヴィスCIのサポートを追加2015年11月27日、Gitのv2.7.0-RC0)、私たちは「中にGitを構築before_script」相とでテストスイートを実行します「script」フェーズ(後で導入された32ビットのLinuxおよびWindowsビルドジョブを除き、 ' script'フェーズ 'でビルドします)。

逆に、Travis CIのプラクティスは、 ' script'フェーズでビルドおよびテストすることです。実際script、C / C ++プロジェクトの ' 'フェーズに対するTravisCIのデフォルトのビルドコマンドは次のとおりです。

./configure && make && make test

Travis CIがこのように行う理由と、それが私たちよりも優れたアプローチである理由は、失敗したビルドジョブがどのように分類されるかにあります。ビルドジョブで問題が発生した後、その状態は次のようになります。

  • 'script 'フェーズのコマンドがエラーを返した場合、'失敗しました' 。
    これは、Travis CIWebインターフェース上で赤い「X」で示されます。

  • 'エラー'、 ' before_install'、 ' install'、または ' before_script'フェーズのコマンドがエラーを返した場合、またはビルドジョブが制限時間を超えた場合。
    これは赤い「!」として表示されます Webインターフェイス上。

これにより、Travis CI Webインターフェースを見る人間と、Travis CI APIを照会する自動ツールの両方で、ビルドの失敗が人間の注意を必要とする責任である場合、つまり、コンパイラーが原因でビルドジョブが「失敗した」場合を簡単に判断できます。エラーまたはテストの失敗、およびそれが制御できない何かによって引き起こされ、ビルドジョブを再起動することで修正される可能性がある場合。たとえば、一時的なネットワークエラーのために依存関係をインストールできなかったためにビルドジョブが「エラー」になった場合、またはOSXビルドジョブが制限時間を超えました。

' before_script'フェーズでGitをビルドすることの欠点は、'エラーが発生したすべての'ビルドジョブのトレースログもチェックして、コンパイラエラーが原因である可能性があるため、エラーの原因を確認する必要があることです。
これには、Webインターフェイスでの追加のクリックとページの読み込み、および自動化ツールでの追加の複雑さとAPIリクエストが必要です。

したがって、ビルドGitを ' before_script'フェーズから' 'フェーズに移動し、scriptそれに応じてスクリプトの名前も更新します。
' ci/run-builds.sh'は基本的に空になりますので、削除してください。
ビルドジョブ構成のいくつかは、デフォルトの ' before_script'をオーバーライドして何もしません。この変更により、デフォルトの ' before_script'も何も実行されないため、これらのオーバーライドするディレクティブも削除します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.