基于git的自动发布

本文介绍了如何在阿里云Ubuntu服务器上,通过Git进行网站自动化部署。首先创建git账号,安装git并建立仓库。然后,配置post-update钩子以在代码提交时触发更新信号,同时设置定时任务来检查这些信号并执行更新操作,包括拉取最新代码、安装依赖及构建。最后,通过crontab设置每10分钟检查一次更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

阿里云服务器(Ubuntu 18.04.4 LTS),自己搭建个网站(Koa),通过git代码提交实现自动发布。


一、准备仓库

1、创建git账号

用于提交代码,不设置密码,仅接受密钥方式登录。
设置环境变量GIT_ROOT作为git仓库的根目录,所有仓库都在${GIT_ROOT}文件夹下,并在此处建立一个空的文件夹${GIT_ROOT}/trigers用于接收代码仓库更新信号。

2、安装git

3、创建仓库

环境变量PROJECT_NAME作为要新建的仓库名称

# 以git用户的身份
su - git
export PROJECT_NAME=abc.xyz.com
mkdir -p ${GIT_ROOT}/${PROJECT_NAME}.git
(cd ${GIT_ROOT}/${PROJECT_NAME}.git && git init --bare)

二、自动化

1、为仓库添加钩子,当仓库有代码提交时写更新信号

# 创建文件夹——信号存储位置
mkdir -p ${GIT_ROOT}/trigers
# 
hook=${GIT_ROOT}/${PROJECT_NAME}.git/hooks/post-update
grep '^#' ${hook}.sample > ${hook}
echo "exec touch ${GIT_ROOT}/trigers/${PROJECT_NAME}.updated" >> ${hook}

2、准备仓库变更处理的定时任务

任务处理脚本:

#!/bin/bash
# -*- coding: utf-8 -*-
# file:/home/git/bin/update.sh
# 更新服务器
# By HanYZ
# 2020-08-26

# 本文件所在文件夹的上一级
# ROOT=$(dirname $(cd $(dirname $0); pwd))
BAK=${HOME}/bakup
TRIGERS=${GIT_ROOT}/trigers
CODE=${HOME}/code

mkdir -p ${BAK}

echo $(date +%Y%m%d%H%M) 开始处理......

# 每个更新标志
for fullname in $(find ${TRIGERS} -type f -name '*.updated'); do
  # 文件名
  filename=$(basename $fullname)
  # 仓库对应的文件夹名称
  name=${filename%.*}
  if [ -d ${CODE}/${name}/.git ]; then
    # 代码更新
    (cd ${CODE}/${name} && git pull && [ -e package.json ] && npm install && (npm run build))

    # 若有不同的文件夹需要发布,在此处添加
    case $name in
      "compound")
        # 设置发布目标文件夹
        dist=${HOME}/publish/${name}
        # 检测编译结果,备份之前版本并发布新版本
        [ -e ${CODE}/${name}/dist ] && mv $dist ${BAK}/$(date +%Y%m%d%H%M) && mv ${CODE}/${name}/dist ${dist}
      ;;
    esac
    # 清除代码更新标识
    rm -rf ${fullname}
  fi
done
echo $(date +%Y%m%d%H%M) 处理完成......

echo

定时任务

crontab -e

添加如下行

*/10 * * * * /home/git/bin/update.sh>>/home/git/log/job.log

总结

利用git的hook在接收到提交后写一个信号,定时任务根据信号进行更新处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值