Pytanie 1: Odnoszą się do użytkownika na serwerze zdalnym.
Pytanie 2: To zależy od dwóch scenariuszy: 1. Będziesz musiał dodać klucz publiczny swojego lokalnego użytkownika, aby przekazać go do zdalnego serwera. 2. Musisz dodać klucz publiczny do lokalnego użytkownika, który uruchamia przechwytywanie po otrzymaniu, jeśli ssh jest wymagane do wdrożenia na innym serwerze. Najprawdopodobniej tylko 1 jest twoją obawą, a 2 nie, ponieważ zdalny serwer będzie zawierał zdalne repozytorium git i serwer www.
Oznacza to, że dodajesz klucz publiczny do pliku authorized_keys w środowisku Linux/Unix. Ten plik jest zwykle umieszczony w /home/$USER/.ssh/authorized_keys Plik authorized_keys znajduje się w tym samym katalogu, co plik known_hosts dla użytkownika.
Pytanie 3: Wyjaśniają, jak skonfigurować zdalne repozytorium git. Nie musi to być ta sama ścieżka, co w lokalnym repozytorium.
OK - teraz, aby wyjaśnić, co się tutaj dzieje. Samouczek uczy, jak skonfigurować zdalne repozytorium, które będzie instalować instalacje jekyll za każdym razem, gdy zostanie ona przekazana.
Oznacza to, że jeśli posiadasz repozytorium github, nie możesz tam ustawić haka po stronie serwera. Zamiast tego instalowałbyś nowego pilota na swoim zdalnym serwerze. Więc powiedzieć, że zalogować się na serwerze (z ssh typowo), uruchom pwd
nauczyć się pełnej ścieżki lub ustawić go w zmiennej środowiskowej:
$DIR=`pwd`
Teraz można utworzyć gołego repo na tym serwerze:
git init --bare $DIR/<SOMEDIRNAME>.git
Teraz masz zdalne, puste repozytorium git na swoim serwerze. Następnie musisz dodać hak, który pozwala mu wdrożyć witrynę Jekyll po otrzymaniu push. Strona, którą masz na liście, ma dość prostą implementację, ale w zasadzie wszystko, co robi, polega na tym, że katalogi witryny są obsługiwane na stronach html, możesz to zrobić na kilka sposobów, sugeruję, żebyś zrobił to bez zakłócania swoich użytkowników tak bardzo, jak to tylko możliwe, tutaj to przykładowy skrypt, który może zrobić coś takiego:
#!/bin/bash
# Assuming a directory structure for www:
# $www_root/releases
# $www_root/shared
# $www_root/current
# all releases go in releases dir as timestamps dirs
# any logs or other shared items go in shared dir - shared/logs
# current is a symlink to latest release
unset GIT_DIR
WWW_ROOT=/PATH/TO/WWW
REPO_PATH=/PATH/TO/REPO
REPO_BRANCH=master
SITE_DIR=/PATH/TO/_SITE/DIR/IN/REPO
DATE=$(date +"%Y%m%d%H%M")
# get code
if [ ! -d $WWW_ROOT/shared/git_maint ]; then
mkdir -p $WWW_ROOT/shared/git_maint
cd $WWW_ROOT/shared/git_maint
git clone $REPO_PATH $WWW_ROOT/shared/git_maint
git checkout master
else
cd $WWW_ROOT/shared/git_maint
git pull
git checkout master
fi
# do deploy
if [ ! -d $WWW_ROOT/releases/$DATE ]; then mkdir $WWW_ROOT/releases/$DATE; fi
cp -ar $WWW_ROOT/shared/git_maint/$SITE_DIR $WWW_ROOT/releases/$DATE
ln -s $WWW_ROOT/new_current $WWW_ROOT/releases/$DATE && mv $WWW_ROOT/new_current $WWW_ROOT/current
exit 0
Coś takiego byłoby dobrym rozwiązaniem. Jeśli zapiszesz ten skrypt na zdalnym serwerze w nagim pliku repozytorium/po otrzymaniu, to będzie on uruchamiany za każdym razem, gdy zostanie wysłane do repozytorium. Wystarczy pamiętać, aby uczynić go wykonywalnym: chmod 755 hooks/post-receive
więc jeśli dodać nowego pilota do git repo z:
git remote add DEPLOY_PROD [email protected]:/path/to/bare/repo
Następnie git push DEPLOY_PROD
- będzie naciskać na pilocie, a następnie pilot repo będzie ogień jego post-otrzymywać hakuj, a następnie skopiuj go do katalogu serwisowego, który można zdmuchnąć niemal w każdym punkcie. Katalog ten jest następnie używany do przeniesienia katalogu serwisu do katalogu wydań, a następnie jest połączony z katalogiem głównym.
Oczywiście wszystko to jest najprawdopodobniej przesadą i można po prostu utworzyć skrypt wdrażania, który uruchamia się z lokalnego hosta, aby zrobić to wszystko przez ssh.
Problem polega na tym, że nie można uruchomić haków po stronie serwera bezpośrednio z github dla tej metodologii, więc trzeba obejść to. Proponuję sprawdzić capistrano jako strategię wdrażania - bieżące/releases/shared dirs i git_maint dir są wzięte z ich schematu, działa dobrze.
Daj mi znać, jeśli potrzebujesz pomocy, mam duże doświadczenie w opracowywaniu strategii wdrażania i zautomatyzowanego wdrażania, więc w zależności od sytuacji sytuacja będzie się różnić.
Dzięki, spróbuję i dam ci znać, jak to działa. Doceniam Twoją pomoc. – Leahcim
nie ma pliku po otrzymaniu w katalogu hooks w repozytorium git. Istnieje tylko 'applypatch-msg.sample post-update.sample pre-commit.sample pre-rebase.sample commit-msg.sample pre-applypatch.sample prepare-commit-msg.sample update.sample' – Leahcim
możesz utworzyć ten plik - to tylko skrypt, który będzie działał po tym, jak git odbierze pakiet. Po prostu nazwij go post-receive - git zrobi resztę. – Michael