python - 如何使用 gitlab-ci 管理相互依赖的轮子的测试/构建

标签 python continuous-integration gitlab gitlab-ci python-wheel

我有 3 个 python 包 proj1proj12proj13proj12proj13 依赖于 proj1(使用 from proj1.xxx import yyy)。

这 3 个项目都在一个私有(private)的 gitlab 实例上,每个都有自己的 .gitlab-ci

proj1 http://gitlab.me.com/group/proj1/.gitlab-ci.yml 我们运行 unittest 并创建一个作为工件暴露的轮子::

# http://gitlab.me.com/group/proj1/.gitlab-ci.yml
image: python:2
mytest:
  artifacts:
    paths:
    - dist
  script:
  - apt-get update -qy; apt-get install -y python-dev python-pip
  - pip install -r requirements.txt
  - python setup.py test
  - python setup.py bdist_wheel
look:
  stage: deploy
  script:
  - ls -lah dist

例如 proj12proj13 http://gitlab.me.com/group/proj12/.gitlab-ci.yml 我们想运行测试 也是,但我需要安装 proj1 wheel 才能让它运行。

所有 3 个项目都在同一个 gitlab 私有(private)组中。

gitlab 的方法是什么?

  • artifactproj1 轮传递给 proj12
    • 在这种情况下,我不知道如何调用/获取工件 http://gitlab.me.com/group/proj12/.gitlab-ci.yml ?是同一个gitlab, 同一组,但不同的项目。
  • 使用 gitlab Secret Variable 来存储 ssh_keysproj12/.gitlab-ci.yml 中克隆 proj2
    • https://gitlab.com/gitlab-org/gitlab-ce/issues/4194相关
    • 这并没有利用 proj1proj12proj13 在同一个gitlab同组,做build的人 一个项目作为完成其他项目的凭据。所有 3 个都通过用户私有(private) token 连接。

我尽量避免必须部署 devpi 或 pypiserver 之类的解决方案。

所以我正在寻找在 proj12 .gitlab-ci.yml 中写入的内容以获得 dist/proj1-0.42-py2-none-any.whl 来自 proj1 先例构建的轮子:

# http://gitlab.me.com/group/proj12/.gitlab-ci.yml
image: python:2
mytest12:
  script:
  - apt-get update -qy; apt-get install -y python-dev python-pip
  - pip install -r requirements.txt
  - pip install .
  - => some way here to get the proj1 wheel 
  - pip install proj1-0.42-py2-none-any.whl
  - python setup.py test

与我们的问题相关的链接:

最佳答案

您有两种方法可以做到这一点:

我建议将其作为工件传递,因为这样您就可以在您正在运行的管道中准确地构建它。至于克隆,据我所知,在克隆子模块时不需要任何解决方法,但为了克隆其他存储库,我会使用 ssh 部署 key ,因为它与存储库相关联,而不是像私有(private) token 这样的用户。

关于python - 如何使用 gitlab-ci 管理相互依赖的轮子的测试/构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41517394/

相关文章:

python - 找到 N 个组中 N 个项目的所有组合,而没有重复的项目组合(python)?

如果创建了 multiprocessing.Pool,Python 子进程 wait() 将失败

python - 如何修复将 $ 解释为 $text $ 中的定界符的数据框?

build - Jenkins Partial Build/Modular Build on Commit Hook

ios - Xcode Server CI 构建无法安装 iOS 7.1

c++ - Visual Build (kinook) 如何构建 C++ 项目?

git - 多个 Gitlab 项目可以使用同一个 Git 存储库吗?

python - Django 找不到静态文件

docker - 在 Docker Hub 中使用 gitlab Repo

GitLab 8.15.0 恢复备份不起作用