当前位置:首页 > 编程 > 使用git自动部署代码

使用git自动部署代码

未寒3个月前 (08-13)编程17540

在一些项目中,有时候需要快速、频繁地部署、更新代码,我们通常的更新方式是使用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处填写地址和密钥即可

image.png

版权声明:本文由未寒博客发布,如需转载请注明出处。

本文链接:https://imzhou.com/archives/296.html

分享给朋友:

相关文章

zblog主题-MANIFEST测试14年前 (2011-06-29)
zblog主题-仿QQMailService14年前 (2011-07-23)
zblog主题Manifest共享13年前 (2011-11-19)
Z-blog主题ReadLite发布12年前 (2012-12-25)

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。