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:
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/148ssh
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.ssh-keygen -t rsa
${HOME}/.ssh/id_rsa
and ${HOME}/.ssh/id_rsa.pub
(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.