栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

基于git的自动发布

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于git的自动发布

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

文章目录
  • 前言
  • 一、准备仓库
      • 1、创建git账号
      • 2、安装git
      • 3、创建仓库
  • 二、自动化
      • 1、为仓库添加钩子,当仓库有代码提交时写更新信号
      • 2、准备仓库变更处理的定时任务
  • 总结


前言

阿里云服务器(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在接收到提交后写一个信号,定时任务根据信号进行更新处理。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826900.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号