首页 文章

构建之后的测试将在gitlab-ci上的新环境中运行

提问于
浏览
12

我有以下配置为.gitlab-ci.yml,但我在成功传递构建阶段后发现(这将创建一个名为venv的virtualenv),似乎在测试阶段你会得到一个全新的环境(没有venv目录在所有) . 所以我想我应该将setup脚本放在before_script中,因为它会在每个阶段运行(build / test / deploy) . 这是一种正确的方法吗?

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

adasd

1 回答

  • 1

    Gitlab CI工作应该是独立的,因为它们可以在不同的跑步者身上运行 . 这不是问题 . 有两种方法可以在阶段之间传递文件:

    • 正确的方法 . 使用人工制品 .

    • 错误的方式 . 使用缓存 . 使用缓存键"hack" . 还需要同一个跑步者 .

    所以,是的,通过gitlab方式假设在脚本之前拥有你的工作所依赖的一切 .

    工件示例:

    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 . 并使用人工制品在工作之间传递工作结果 . 请注意,artefact还上传到gitlab web界面并能够下载它们 . 因此,如果它们很重,请使用小的expire_in时间,以便在完成所有工作后删除它们 .

相关问题