我有 3 个 python 包 proj1
、proj12
和 proj13
。 proj12
和
proj13
依赖于 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
例如 proj12 和 proj13
http://gitlab.me.com/group/proj12/.gitlab-ci.yml
我们想运行测试
也是,但我需要安装 proj1
wheel 才能让它运行。
所有 3 个项目都在同一个 gitlab 私有(private)组中。
gitlab 的方法是什么?
- 用 artifact 将
proj1
轮传递给proj12
- 在这种情况下,我不知道如何调用/获取工件
http://gitlab.me.com/group/proj12/.gitlab-ci.yml
?是同一个gitlab, 同一组,但不同的项目。
- 在这种情况下,我不知道如何调用/获取工件
- 使用 gitlab Secret Variable 来存储 ssh_keys在
proj12/.gitlab-ci.yml
中克隆proj2
?- 与https://gitlab.com/gitlab-org/gitlab-ce/issues/4194相关
- 这并没有利用
proj1
、proj12
和proj13
在同一个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
与我们的问题相关的链接:
- 允许使用受限访问 token 访问构建工件 https://gitlab.com/gitlab-org/gitlab-ce/issues/19628
- “人们需要能够共享基于 git 引用(分支、标签等)的工件链接,而无需知道特定的构建 ID https://gitlab.com/gitlab-org/gitlab-ce/issues/4255
- https://docs.gitlab.com/ce/api/ci/builds.html#upload-artifacts-to-build
- 下载工件文件 https://docs.gitlab.com/ce/api/builds.html#download-the-artifacts-file https://gitlab.com/gitlab-org/gitlab-ce/issues/22957
最佳答案
您有两种方法可以做到这一点:
- Pass the object from previous build using the artifacts (仅在同一项目内工作)
- 使用预先安装在 git 作业中的软件包构建一个 docker 镜像,将其存储在内置注册表中,并使用它在您的其他项目中运行构建。
- 克隆存储库
我建议将其作为工件传递,因为这样您就可以在您正在运行的管道中准确地构建它。至于克隆,据我所知,在克隆子模块时不需要任何解决方法,但为了克隆其他存储库,我会使用 ssh 部署 key ,因为它与存储库相关联,而不是像私有(private) token 这样的用户。
关于python - 如何使用 gitlab-ci 管理相互依赖的轮子的测试/构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41517394/