简体   繁体   中英

Plesk automatically update submodule on git repository change

I have setup my plesk website to automatically pull changes from a remote repository to a certain path of the webserver via post-hooks as described here .

However my repository contains a git submodule and I need to run the custom command git submodule update --remote as well. How can I tell plesk to do that. The commands I can enter in the

Enable Additional Deployment Actions

Setting seem not to be executed in the correct path. Also when I go to the path the repository syncs to on my server i get:

fatal: Not a git repository (or any of the parent directories): .git

How can I achive to tell plesk to update submodules too with the git plugin?

In my case it was two problems. It was a setting for a subdomain, where the folderstructure is different in plesk.

First I had to set the "Additional Deployment Action" to

# find the correct git folders / repositorys by ssh-ing onto your server
git --git-dir=/var/www/vhosts/example.com/git/example.git --work-tree=/var/www/vhosts/example.com/subdomain.example.com/path/to/working-directory/ submodule update --init --recursive

The second problem was that the submodule was placed on github, so I had to add the specific subdomain ssh-key to github. It can be found in.

/var/www/vhosts/example.com/.ssh/id_rsa.pub

even for the subdomain. Hope that helps someone else.

Check if you are in the right folder ( as I show here )

Then check your environment variables ( seen here ): GIT_DIR or GIT_WORK_TREE , as set by Plex, to make sure they are not interfering.

For me Niklas answer did not work unless I did a cd into the worktree directory. You can add this to the git command itself (using -C ). Also I have added a sync command, in case the submodules origin changes:

git --git-dir=/git/repo_name.git --work-tree=. -C /httpdocs/website submodule sync --recursive
git --git-dir=/git/repo_name.git --work-tree=. -C /httpdocs/website submodule update --init --recursive

I want to also note, that using variables did not work for me, I had to use absolute path for both commands.

Note: My hoster is netcup.com, maybe that is a specific issue on their side, but I guess it is relevant for all plesk installations.

Although it's been a while here my two cents. I'm glad the given answers where pointing me in the right direction, however I still had to struggle with this quite some time.

Here is my summary:

Using submodules in Plesk

  • repos to be integrated as submodules must not be privat
  • Don't ssh ! To integrate an external repo we must use https protocol: git submodule add https://github.com/example.repo.git - see https://github.com/docker-library/golang/issues/148
  • the ${HOME} user (see code below) is used to authorize against github, so his key pair needs to be generated and the public key must be stored at Github
  • ssh into your account using the ${HOME} users name and password. In Plesk the ${HOME} user is the owner of the subscription domain.com or sub.domain.com belongs to.
  • to generate a key pair do:
ssh-keygen -t rsa

  • key pairs are automatically stored under the users home directory: ${HOME}/.ssh/id_rsa and ${HOME}/.ssh/id_rsa.pub
  • copy the generated public key over to Github

Usage

(under " Additional deployment actions ")

git --git-dir=${HOME}/git/example.repo.git --work-tree=. submodule update --init &> ~/logs/git/example.repo.log
git --git-dir=${HOME}/git/example.repo.git --work-tree=. checkout master &>> ~/logs/git/example.repo.log
git --git-dir=${HOME}/git/example.repo.git --work-tree=. pull origin master &>> ~/logs/git/example.repo.log
git --git-dir=${HOME}/git/example.repo.git --work-tree=. submodule update --init --recursive &>> ~/logs/git/example.repo.log

git commit -am "submodule updated $(date)"

or the short way

git --git-dir=${HOME}/git/example.repo.git --work-tree=. submodule foreach 'git submodule update --init;git checkout master;git pull origin master;git submodule update --init --recursive;' &> ~/logs/git/example.repo.log

git commit -am "submodule updated $(date)"

Explanation: we must use --git-dir and --work-tree here because of Plesks folder structure. Normally .git files are located within the main repository folder. Here these files are in its own git folder:

 -- domain.com
    -- git
       -- example.repo.git
    -- sub.domain.com

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM