Golang 简单自动更新部署实现

Shell脚本实现

#!/bin/bash
echo "开始发布"
cd /run-path
echo "同步代码"
git pull
echo "编译项目"
go build -o /build-file-path -ldflags "-w -s" ./

echo "停止当前服务"

pid=$(ps -ef | grep 'keyword' | grep -v grep | awk '{print $2}')

if [ -n "$pid" ]; then
    kill -9 $pid
else
    echo "服务未启动"
fi

echo "重启新服务"

cd /run-path/

sleep 1

echo "重启新服务"

if [[ -f "${release_dir}build_last" ]]; then
    echo "存在新版本文件,尝试替换"
    if [[ -f "${release_dir}build" ]]; then
        echo "存在旧程序文件,删除build"
        rm -f "${release_dir}build"
    fi
    mv "${release_dir}build_last" "${release_dir}build"
fi

nohup "${release_dir}build" > output.log 2>&1 &

cat "${release_dir}output.log"

echo "部署完成"

goploy 使用custom 上传相关文件

/bin/sh -c "scp -r ${REPOSITORY_PATH}/${AFTER_DEPLOY_FILENAME} ${SERVER_OWNER}@${SERVER_IP}:${PROJECT_PATH}/${AFTER_DEPLOY_FILENAME}"