GitHub runner + workflows + docker 实现推送代码自动部署网站

发布时间:

说明

回头我放个完整的仓库

仓库模板

注意:仓里里的 .github/workflows 里的文件很重要

# 放在 仓库/.github/workflows/deploy-prod.yml name: Deploy to Production on: push: branches: - prod # 只对这个分支 做出响应(代码合并到名字叫prod的分支,才会触发工作流) jobs: deploy: runs-on: self-hosted env: APP_DIR: /home/ecs-user/app # 这里似乎必须硬编码 user,否则会报错 # 在这里定义环境变量,使用 secrets # DB_HOST: ${{ secrets.DB_HOST }} # DB_PORT: ${{ secrets.DB_PORT }} # DB_NAME: ${{ secrets.DB_NAME }} # DB_USER: ${{ secrets.DB_USER }} # DB_PASSWORD: ${{ secrets.DB_PASSWORD }} steps: - name: Check running user and permissions run: | echo "Current user: $(whoami)" echo "User ID: $(id)" echo "Groups: $(groups)" echo "Home directory: $HOME" - name: Check Docker version run: docker --version # 1 - name: Check Docker is running run: docker info - name: Checkout code uses: actions/checkout@v3 with: ref: prod fetch-depth: 0 clean: true - name: Show current commit run: | echo "Current commit:" git log -1 --oneline echo "Git status:" git status - name: Setup deploy directory run: | mkdir -p ${{ env.APP_DIR }} cd ${{ env.APP_DIR }} if [ -d current ]; then rm -rf backup mv current backup fi mkdir -p current - name: Copy project files run: | cp -r ./* ${{ env.APP_DIR }}/current/ # 先构建新镜像 - name: 拉取基础镜像 working-directory: ${{ env.APP_DIR }}/current run: | docker compose -f docker-compose.prod.yml pull - name: 构建新镜像 working-directory: ${{ env.APP_DIR }}/current run: | docker compose -f docker-compose.prod.yml build - name: 停止旧容器 working-directory: ${{ env.APP_DIR }}/current run: | docker compose -f docker-compose.prod.yml stop - name: 启动新容器 working-directory: ${{ env.APP_DIR }}/current run: | docker compose -f docker-compose.prod.yml up -d - name: Clean up if: always() run: | docker system prune -f docker image prune -f cd ${{ env.APP_DIR }} ls -t | grep -v 'current\|backup' | tail -n +6 | xargs -r rm -rf

步骤0、在服务器创建一个普通用户,如ecs-user

adduser ecs-user

步骤1、在服务器安装docker

按照官方教程走 https://docs.docker.com/engine/install/ubuntu/ 

不要使用 snap 安装,因为 snap 安装的 docker似乎有些命令不兼容 (我之前被坑过好几次)

把用户加入docker组

sudo usermod -aG docker ecs-user

步骤2、 安装 github runner

注意:在服务器安装github runner的时候,不要用root账户,而是用普通用户,因为github runner不能使用root账户运行

仓库 =》 Settings =》 Actions =》 Runners =》 New self-hosted runner =》 根据步骤操作

提示: 如果遇到错误,确保自己没有选错 【Runner image】

步骤3、 让 github runner 开机启动(服务)

1、创建 github runner 服务文件

# 编辑 sudo vim /etc/systemd/system/github-runner.service

2、添加内容

[Unit] Description=GitHub Actions Runner After=network.target [Service] ExecStart=/home/ecs-user/actions-runner/run.sh User=ecs-user WorkingDirectory=/home/ecs-user/actions-runner/ Restart=always RestartSec=5 [Install] WantedBy=multi-user.target

3、启动服务

sudo systemctl daemon-reload sudo systemctl enable github-runner.service sudo systemctl start github-runner.service

4、查看服务状态

sudo systemctl status github-runner.service

现在就可以在github 的runner 页面 ,看看是不是上线了


2025 © 糊涂.