如何使用依赖项组织我的git存储库?

时间:2020-03-29 01:29:48

标签: python git gitlab gitlab-ci-runner

我正在将自托管的GitLab实例用于多个Python项目。现在,所有这些项目都有执行多个Py linter和静态分析器的管道。 gitlab运行程序已安装?- length(B, 3), forall(bits(B), format('~q~n', [B])). [x,x,x] [x,x,o] [x,o,x] [x,o,o] [o,x,x] [o,x,o] [o,o,x] [o,o,o] ,包括必需的程序包/填充物。因此,跑步者会敏锐地执行:

python3

如果我想使用另一个Linter版本,则由于所有安装的系统Linter,都需要“更新”所有项目。我现在有两个选择。

  1. 我还将管道所需的所有模块也提交给了仓库
  2. 我使用Python虚拟环境
  3. 另一个想法?

我正在寻找可以分享经验的人

1 个答案:

答案 0 :(得分:1)

我建议使用基于容器的执行器,即Docker或Kubernetes:https://docs.gitlab.com/runner/executors/README.html

然后在管道的每个作业中,为该作业选择正确的Docker映像。
它使您可以灵活地使用任何python版本,甚至可以使用Docker Hub上数以百万计的任何图像。

您需要为在正式映像之上运行的每项作业安装依赖项或工具,这会增加构建时间。

run_script:
  image: python:3
  script:
    - pip3 install pipenv
    - pipenv install
    - pipenv run ./my_beautiful_script.py

您可以使用特定的工具\ configs \ prerequisites \ dependencies \ environment创建自定义图像并使用它,但我也不太喜欢。这种方法的另一个好处是-您还可以测试它们的安装,这是持续交付中的最佳做法。

关于 python linters -我选择同时使用其中的几个,因为它们涵盖了质量的不同方面,我主要通过pre-commit hooks运行它们,如果开发人员忘记在本地安装钩子,也可以在GitLab CI中执行。

剥离.pre-commit-config.yaml的示例:

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
  rev: v2.5.0
  hooks:
    - id: check-yaml

- repo: https://gitlab.com/pycqa/flake8
  rev: 3.7.9
  hooks:
    - id: flake8

- repo: https://github.com/pre-commit/mirrors-autopep8
  rev: v1.5
  hooks:
    - id: autopep8
      args: [--diff]

- repo: https://github.com/asottile/pyupgrade
  rev: v2.1.0
  hooks:
    - id: pyupgrade

.gitlab-ci.yml可以运行pre-commit和其他python linter:

python-lint:
  image: python:3
  script:
    - pip3 -q install pre-commit pycodestyle pylint

    - pre-commit run -a

    - pycodestyle --version
    - pycodestyle --verbose --show-source *.py

    - pylint --version
    - find . -name "*.py" -print0 | xargs -0 pylint

在我用于所有与python相关的代码的模板项目中查看完整文件:https://gitlab.com/softmill/template-projects/python