15

私は .gitlab-ci.yml として次の構成を持っていますが、ビルド段階 (venv と呼ばれる virtualenv を作成する) を正常に通過した後、テスト段階でまったく新しい環境を取得するようです (venv ディレクトリはありません全て)。したがって、各フェーズ(ビルド/テスト/デプロイ)で実行されるように、セットアップスクリプトを before_script に配置する必要があるのではないかと思います。それは正しい方法ですか?

before_script:
  - uname -r 

types:
  - build
  - test
  - deploy

job_install:
  type: build
  script:
    - apt-get update
    - apt-get install -y libncurses5-dev
    - apt-get install -y libxml2-dev libxslt1-dev
    - apt-get install -y python-dev libffi-dev libssl-dev 
    - apt-get install -y python-virtualenv
    - apt-get install -y python-pip
    - virtualenv --no-site-packages venv
    - source venv/bin/activate
    - pip install -q -r requirements.txt
    - ls -al
  only:
    - master

job_test:
  type: test
  script:
    - ls -al
    - source venv/bin/activate
    - cp crawler/settings.sample.py crawler/settings.py
    - cd crawler 
    - py.test -s -v 
  only:
    - master

アダスド

4

1 に答える 1

1

Gitlab CI ジョブは、異なるランナーで実行できるため、独立していると考えられていました。問題ではありません。ステージ間でファイルを渡す方法は 2 つあります。

  • 正しい方法。アーティファクトの使用。
  • 間違った方法。キャッシュの使用。キャッシュキー「ハック」付き。まだ同じランナーが必要です。

そうです、gitlab の方法では、ジョブが依存するすべてのものを before スクリプトに含めると想定されています。

アーティファクトの例:

  artifacts:
   when: on_success
   expire_in: 1 mos
   paths:
    - some_project_files/

キャッシュの例:

cache:
  key: "$CI_BUILD_REF_NAME"
  untracked: true
  paths:
   - node_modules/
   - src/bower_components/

適切な実行環境のために、apt-get 依存関係を含むイメージで docker を使用することをお勧めします。また、ジョブ間でジョブの結果を渡すためにアーティファクトを使用します。アーティファクトも gitlab Web インターフェイスにアップロードされ、ダウンロードできることに注意してください。したがって、それらが非常に重い場合は、すべてのジョブが完了した後にそれらを削除するために、小さい expire_in 時間を使用します。

于 2016-12-25T11:52:13.097 に答える