· 5 years ago · Feb 13, 2020, 05:46 PM
1#!/bin/bash
2# variable
3APP_NAME=$1
4REPOSITORY=$2
5SECRET_KEY=$(cat /dev/urandom | LC_ALL=C tr -dc a-zA-Z0-9 | fold -w 32 | head -n 1)
6IP=
7
8if [[ "$APP_NAME" == "" ]] && [[ "$REPOSITORY" == "" ]]; then
9 echo 'Вы не указали параметры (Example: deploy.sh project_name User/site.git)';
10 exit;
11elif [[ "$APP_NAME" == "" ]]; then
12 echo 'Вы не указали название проекта';
13 exit
14elif [[ "$REPOSITORY" == "" ]]; then
15 echo 'Вы не указали репозиторий проекта GitHub (Example: User/site.git)';
16 exit
17fi
18
19echo "Start create autodeploy for $1"
20mkdir -p /var/www/${APP_NAME}
21
22
23cd ~
24# install golang
25echo "install golang"
26wget https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz &> /dev/null
27sudo tar -C /usr/local -xzf go1.12.9.linux-amd64.tar.gz &> /dev/null
28export PATH=$PATH:/usr/local/go/bin
29
30# install webhook
31echo "install webhook"
32go get github.com/adnanh/webhook &> /dev/null
33
34#configure
35echo "configure"
36mkdir -p ~/hooks/${APP_NAME}
37touch ~/hooks/hooks.json
38touch ~/hooks/${APP_NAME}/output.log
39touch ~/hooks/supervisor.log
40touch ~/hooks/${APP_NAME}/deploy.sh
41chmod +x ~/hooks/${APP_NAME}/deploy.sh
42
43echo '[ { "id": "deploy-'${APP_NAME}'", "execute-command": "/root/hooks/'${APP_NAME}'/deploy.sh", "command-working-directory": "/var/www/'${APP_NAME}'/", "response-message": "Executing deploy script...", "trigger-rule": { "and": [ { "match": { "type": "payload-hash-sha1", "secret": "'${SECRET_KEY}'", "parameter": { "source": "header", "name": "X-Hub-Signature" } } }, { "match": { "type": "value", "value": "refs/heads/master", "parameter": { "source": "payload", "name": "ref" } } } ] } } ]' >> ~/hooks/hooks.json
44#
45
46cat <<EOT >> ~/hooks/${APP_NAME}/deploy.sh
47#!/bin/bash
48exec > /root/hooks/${APP_NAME}/output.log 2>&1
49git fetch --all
50git checkout --force "origin/master"
51npm install --production
52npm run production
53ln -s /root/hooks/${APP_NAME}/output.log /var/www/${APP_NAME}/storage/logs/deploy.log
54EOT
55
56cd /var/www/${APP_NAME}
57git init &> /dev/null
58git remote add origin git@${APP_NAME}:${REPOSITORY} &> /dev/null
59
60cat <<EOT >> ~/.ssh/config
61# ${APP_NAME}
62Host ${APP_NAME} github.com
63HostName github.com
64IdentityFile ~/.ssh/${APP_NAME}_id_rsa
65EOT
66
67#install supervisor
68echo "install supervisor"
69add-apt-repository universe &> /dev/null
70apt-get update &> /dev/null
71yes | apt-get install supervisor &> /dev/null
72cat <<EOT >> /etc/supervisor/conf.d/webhooks.conf
73[program:webhooks]
74command=bash -c "/root/go/bin/webhook -hooks /root/hooks/hooks.json -ip '${IP}' -verbose"
75redirect_stderr=true
76autostart=true
77autorestart=true
78user=root
79numprocs=1
80process_name=%(program_name)s_%(process_num)s
81stdout_logfile=/root/hooks/supervisor.log
82environment=HOME="/root",USER="root"
83EOT
84
85sudo supervisorctl reread &> /dev/null
86sudo supervisorctl update &> /dev/null
87sudo supervisorctl start webhooks:* &> /dev/null
88
89cd ~/.ssh
90ssh-keygen -t rsa -N "" -f ${APP_NAME}_id_rsa -C "example@domain.com" &> /dev/null
91echo "SSH Ключ для GitHub:"
92echo "$(cat ~/.ssh/${APP_NAME}_id_rsa.pub)"
93echo "************************************************"
94echo "WebHook для GitHub (Content-Type: aplication/json)"
95echo "URL: http://${IP}:9000/hooks/deploy-${APP_NAME}"
96echo "Secret-Key: ${SECRET_KEY}"
97echo "************************************************"