线上的一些小项目偶尔需要实现自动更新,不考虑写Jenkins配置单的话,可以结合Git仓库的Master来做自动更新

首先要配置项目无需验证账户密码就可以拉取文件,执行完下面命令,输入账户密码后下次拉取代码不会重新询问账户密码

git config --global credential.helper store
git pull

设置一下自动拉取Master分支,并结合Supervisor重启一次应用程序

脚本如下

#!/bin/bash

# Author: chancel.yang
# Date: 2023-12-15
# Description: Automatically update Git and restart the project


projectPath='/home/Apps/hello-world'
projectName='hello-world'

cd $projectPath
git fetch
UPSTREAM=${1:-'@{u}'}
LOCAL=$(git rev-parse @{0})
REMOTE=$(git rev-parse "$UPSTREAM")
BASE=$(git merge-base @{0} "$UPSTREAM")
if [ $LOCAL = $REMOTE ]; then
    echo "Up-to-date"
elif [ $LOCAL = $BASE ]; then
    supervisorctl stop $projectName
    # 脚本由Root执行,但拉取不可用Root用户否则项目执行用户Apps无权限执行项目
    su - Apps git pull
    supervisorctl start $projectName

注意git的旧版本不允许使用@,所以你可能需要使用@ {0}