Перехватчики Git Pre-commit

Мне нужно настроить серию перехватчиков Gitlab в образе Docker, которые будут запускаться при предварительной фиксации. У меня есть файл Docker и pre-commit-config.yaml, который успешно создается, за исключением одного крючка, который, похоже, не работает.

.pre-commit-config.yaml

---
repos:
  - repo: local
    hooks:
      - id: check-merge-conflict
        name: Check for merge conflicts
        description: Check for files that contain merge conflict strings.
        entry: check-merge-conflict
        language: python
        types: [text]

      - id: epp-validate
        additional_dependencies: ['puppet']
        description: Validate syntax of Puppet EPP templates
        entry: /puppet-pre-commit-hooks/epp-validate
        files: \.epp$
        language: ruby
        name: Validate EPP templates

      - id: erb-validate
        description: Validate syntax of Ruby ERB templates
        entry: /puppet-pre-commit-hooks/erb-validate
        files: \.erb$
        language: ruby
        name: Validate ERB templates

      - id: puppet-lint
        additional_dependencies: ['puppet-lint']
        description: Check Puppet manifests for stylistic problems
        entry: /puppet-pre-commit-hooks/puppet-lint
        files: \.pp$
        language: ruby
        name: puppet-lint
        args:
          - --fail-on-warnings

      - id: puppet-validate
        additional_dependencies: ['puppet']
        description: Validate syntax of Puppet manifests
        entry: /puppet-pre-commit-hooks/puppet-validate
        files: \.pp$
        language: ruby
        name: Validate Puppet manifests

      - id: r10k-validate
        additional_dependencies: ['r10k']
        description: Validate syntax of Puppetfile using r10k
        entry: /puppet-pre-commit-hooks/r10k-validate
        files: ^Puppetfile$
        language: ruby
        name: Validate r10k Puppetfile

      - id: ruby-validate
        additional_dependencies: ['ruby']
        description: Validate syntax of ruby code
        entry: /puppet-pre-commit-hooks/ruby-validate
        files: \.rb$
        language: ruby
        name: Validate ruby syntax

Мне пришлось настроить хуки как локальные, потому что среда, в которой это используется, имеет воздушный зазор, который предотвращает доступ к Интернету. Чтобы преодолеть это, я клонировал несколько репозиториев с соответствующими хуками.

Сборка выполняется успешно, за исключением ловушки check-merge-конфликт, которую не удается найти. В контейнере докера код Python для этого хука находится в /pre-commit-hooks/pre_commit_hooks/check_merge_commit.py.

Я попытался изменить запись: значение на '' '/ pre-commit-hooks / pre_commit_hooks / check_merge_commit pre_commit_hooks / check-merge-commit check_merge_commit' ''

... но ничего из этого не сработало.

Файл Docker

FROM ruby:2.5.0

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN source ~/.profile
RUN curl https://pre-commit.com/install-local.py | python -
COPY pre-commit/.pre-commit-config.yaml .
RUN git clone https://github.com/pre-commit/pre-commit-hooks.git
RUN git clone https://github.com/chriskuehl/puppet-pre-commit-hooks.git
RUN git clone https://github.com/adrienverge/yamllint.git
WORKDIR /jumanjihouse
RUN git clone https://github.com/jumanjihouse/pre-commit-hooks.git
RUN rm -rf /jumanjihouse/pre-commit-hooks/.git* /yamllint/.git* /puppet-pre-commit-hooks/.git* /pre-commit-hooks/.git* /usr/local/lib/ruby/gems/2.5.0/gems/*/.git*
WORKDIR /
RUN git init
RUN /root/bin/pre-commit run -a

Кто-нибудь знает, что я упускаю / делаю не так?

Хук взят из Github.


person MmmmDonuts    schedule 30.01.2020    source источник
comment
вы упомянули, что у вас есть воздушный зазор, но вы все еще клонируете из github - можете ли вы использовать обычную конфигурацию и запустить _ 1_ внутри образа докера? таким образом вы можете использовать это изображение через воздушный зазор без необходимости устанавливать что-либо во время выполнения   -  person Anthony Sottile    schedule 30.01.2020
comment
Нет, мне нужно создать образ докера вне системы, которая будет его использовать, а затем перенести образ докера в защищенную область. Это позволяет мне клонировать изображение до того, как оно будет передано в защищенную систему. Если в этом есть смысл.   -  person MmmmDonuts    schedule 30.01.2020
comment
Ага! мы делаем то же самое в Lyft - вы можете запускать pre-commit install-hooks снаружи с любой нормальной конфигурацией - во время выполнения он вообще не будет использовать сеть   -  person Anthony Sottile    schedule 30.01.2020
comment
Итак, если я поставлю RUN /root/bin/pre-commit install-hooks Это должно сработать? Извините, если это базовые вещи, но я новичок в написании конвейеров.   -  person MmmmDonuts    schedule 30.01.2020
comment
Ага! - и вернитесь к исходной конфигурации (нет необходимости local или ручного клонирования)   -  person Anthony Sottile    schedule 30.01.2020
comment
Ты легенда, спасибо, Энтони, очень признателен.   -  person MmmmDonuts    schedule 30.01.2020
comment
нет проблем, позвольте мне написать кое-что из этого в ответе, который будет более постоянным   -  person Anthony Sottile    schedule 30.01.2020


Ответы (1)


Вам не нужно клонировать каждый репозиторий вручную и использовать локальные хуки так, как вы делаете - если у вас есть доступ к клонированию во время сборки, вы сможете выполнить обычный подход к установке.

Чтобы убедиться, что все хуки предустановлены, вам нужно запустить pre-commit install-hooks < / a> как одна из команд в вашем файле докеров

Это гарантирует, что все исполняемые файлы хуков правильно кэшированы в вашем образе, а затем будут доступны позже, когда вы запустите pre-commit run ...


отказ от ответственности: я являюсь автором pre-commit

person Anthony Sottile    schedule 30.01.2020