Skip to content

CI/CD持续部署(基于github actions)

概念

Workflow

存放在.github/workflows/文件夹,以.yml为后缀

Event

触发workflow的条件,如push main

Job

一个工作流可以有多个Job,进行不同的任务。每个Job分配一台虚拟服务器去运行。

Step

Job里的具体工作步骤

示例

name: CI/CD for My Project # 工作流的名字,会显示在 GitHub 的 Actions 页面上

# 1. 触发条件 (Event)
on:
  push:
    branches:
      - main # 只有当代码推送到 main 分支时,才会触发自动化流程

# 2. 任务 (Job)
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest # GitHub 免费提供给你的 Ubuntu 虚拟服务器(Runner)

    # 3. 步骤 (Steps)
    steps:
      # 步骤 A: 检出代码 (把你的代码拉取到 GitHub 的这台虚拟服务器上)
      - name: Checkout code
        uses: actions/checkout@v3

      # 步骤 B: 登录镜像仓库 (为了后续能把做好的镜像推送到云端保存)
      - name: Login to Docker Registry
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      # 步骤 C: 编译并构建 Docker 镜像,然后推送到仓库
      - name: Build and Push Docker Image
        run: |
          docker build -t my-docker-repo/my-app:latest .
          docker push my-docker-repo/my-app:latest

      # 步骤 D: 登录你的真实云服务器并执行部署命令
      - name: Deploy to Server via SSH
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SERVER_IP }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SERVER_SSH_KEY }}
          script: |
            # 以下是在你的真实云服务器上执行的命令
            cd /app/my-project
            docker pull my-docker-repo/my-app:latest
            docker-compose up -d

密钥管理

在settings的secrets的actions里,通过配置密钥,保证CI/CD安全。且一般github与服务器通过公私密钥进行登录。