Создание сценария оболочки, который удаляет указанные файлы в репозитории git

Это происходит потому, что разрешения проверяются на каждом уровне, чтобы добраться до каталога, а не только до целевого каталога. Вы можете дать пользователю или группе разрешение на проход в каталог без возможности доступа к тому, что находится внутри него, установив бит execute для этого пользователя или группы без установки битов read или write.

Например:

chmod 710 /home/$USER
chmod 710 /home/edent/Dropbox
chmod 750 /home/edent/Dropbox/Foo

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

Если у вас есть root на хосте, более аккуратным решением будет использование bind mount. В /etc/fstab добавьте что-то вроде:

/home/edent/Dropbox/foo /var/www/html/foo none bind 0 0

Это заставит каталог Dropbox отображаться в каталоге /var/www/html, независимо от любых других разрешений файловой системы. Теперь вам нужно беспокоиться только о разрешениях файлов внутри этого каталога, а не в иерархии над ним. Это можно рассматривать как суперсимлинк, который может охватывать файловые системы. Например, я использую это на машине с небольшим SSD-диском для /, а все мои большие медиафайлы находятся на отдельном большом диске. Я создаю видимость того, что эти медиафайлы находятся в моем домашнем каталоге с помощью:

/media/bigdrive/media /home/me/media none bind 0 0
-1
06.04.2019, 20:40
1 ответ

Вы можете развернуть свой код из репозитория git с помощью rsync. Файл, например. exclude-rsync.txtможет содержать все файлы и каталоги (по одному в строке )вы не хотите развертывать в целевом объекте (также может быть новым каталогом ).

исключить -rsync.txt

.git
.gitignore
include/database.yml

команда rsync

 rsync -avz --delete --exclude-from=exclude-rsync.txt. foo@192.168.0.123:/var/www/foobar/

Конвейеры CI/CD

С помощью gitlab, travis ci (и jenkins )вы можете определить конвейеры ci/cd обычно в файле yaml. Всякий раз, когда что-то отправляется в git (lab )или ветка объединяется с мастером, конвейер запускается автоматически. Для gitlab вы должны добавить файл с именем .gitlab-ci.yml, и он может выглядеть так:

stages:
  - deploy
deploy_production:
  stage: deploy
  environment: production
  only:
    - master@my_repo
  before_script:
    - yum -y install rsync    
  script:
    - |
       rsync -avz --delete --exclude-from=exclude-rsync.txt. foo@192.168.0.123:/var/www/foobar/

Но в более простом случае вы бы добавили файл оболочки, например. deploy.shимея в виду, что такие конвейеры существуют, и это может быть хорошей практикой.

#!/bin/bash
rsync -avz --delete --exclude-from=exclude-rsync.txt. foo@192.168.0.123:/var/www/foobar/
0
28.01.2020, 05:12

Теги

Похожие вопросы