使用git自动部署代码
在一些项目中,有时候需要快速、频繁地部署、更新代码,我们通常的更新方式是使用git托管代码,随后在服务器上面通过git pull来拉取代码。
但是如果频繁的地操作的话还是会麻烦,可以通过提交代码到发行分支后自动部署更新的方式来更新。
首先当然是在服务器上面生成git的密钥
要在Ubuntu上为Git生成SSH密钥,您可以按照以下步骤操作:
1. 打开终端。
2. 检查是否已存在SSH密钥。您可以通过运行命令`ls -al ~/.ssh`来做这件事。如果您看到名为`id_rsa.pub`或`id_dsa.pub`的文件,那么您已经拥有SSH密钥了。
3. 如果您没有SSH密钥或想要生成一个新的,可以使用命令 `ssh-keygen -t rsa -b 4096 -C "[email protected]"`。将 `"[email protected]"` 替换成您的电子邮件地址。此命令将生成一个新的SSH密钥。
4. 当系统提示“Enter a file in which to save the key”(输入一个文件以保存密钥)时,按回车键。这将接受默认文件位置。
5. 在提示符下,输入一个安全的密码短语。
6. 使用命令 `ssh-add ~/.ssh/id_rsa` 将您的SSH密钥添加到ssh-agent中。
接下来将代码clone到服务器的指定目录中
#!/bin/bash # 设置变量 project_path="/opt/1panel/apps/openresty/openresty/www/sites/www.qq.com/index" repository="[email protected]:hello/world.git" branch="master" deploy_tmp_path="/wwwroot/code" # 克隆仓库 git clone --no-checkout "$repository" "$deploy_tmp_path" # 复制 .git 目录到项目路径 cp -r "$deploy_tmp_path/.git" "$project_path/" # 切换到项目路径 cd "$project_path" # 重置仓库到指定分支 git reset --hard "origin/$branch" # 更改文件权限 chown -R www:www "$project_path" # 删除临时目录 rm -rf "$deploy_tmp_path"
接下来就需要创建一个接收github推送的http接口,我们可以利用这个库:https://github.com/adnanh/webhook
安装webhook:
sudo apt-get install webhook
创建一个webhook配置文件,比如:/wwwroot/webhook/hooks.json
编辑这个文件,一些参数可以参考文档:https://github.com/adnanh/webhook/blob/master/docs/Webhook-Parameters.md:
[ { "id": "deploy",//消息ID,对于有多个项目的可以区分 "execute-command": "/wwwroot/webhook/deploy/deploy.sh",//接收webhook后运行的脚本 "command-working-directory": "/wwwroot/webhook/deploy", "pass-arguments-to-command": [ { "source": "payload", "name": "head_commit.id" }, { "source": "payload", "name": "pusher.name" }, { "source": "payload", "name": "pusher.email" } ], "trigger-rule": { "and": [ { "match": { "type": "payload-hmac-sha1", "secret": "h45wuyjrsdxj57yi",//github推送密钥 "parameter": { "source": "header", "name": "X-Hub-Signature" } } }, { "match": { "type": "value", "value": "refs/heads/master",//匹配的分支 "parameter": { "source": "payload", "name": "ref" } } } ] } } ]
然后编辑文件/wwwroot/webhook/deploy/deploy.sh(自行修改为自己的代码命令):
#!/bin/bash # 打印当前日期和时间,格式为 YYYY-MM-DD HH:MM:SS+时区 date +"%Y-%m-%d %H:%M:%S%z" # 以 www 用户身份运行后面的命令 su - www -s /bin/bash -c ' # 定义 www 用户的主目录路径 www_home='/home/www' # 设置 HOME 环境变量为 www 用户的主目录 export HOME=$www_home # 设置语言环境为中文(UTF-8) export LANG='zh_CN.UTF-8' # 切换到项目目录 cd /www/wwwroot/my-code # 配置 Git 拉取时不使用 rebase git config pull.rebase false # 重置本地 master 分支到远程 origin/master 的最新状态 git reset --hard origin/master # 拉取远程仓库的最新更改 git pull # 强制检出 master 分支 git checkout -f master #其他代码命令,如编译等 composer install php artisan config:cache php artisan route:clear php artisan view:clear ' # 再次打印当前日期和时间 date +"%Y-%m-%d %H:%M:%S%z" # 正常退出脚本 exit 0
最后运行webhook:
webhook -hooks hooks.json -port 10801 -logfile webhook.log
运行后会自动监听服务,在GitHub处填写地址和密钥即可
版权声明:本文由未寒博客发布,如需转载请注明出处。