github Actions 工作流

1.github actions 介绍

GitHub Actions 是由 GitHub 提供的一项云服务,它在 GitHub 服务器上自动运行。您可以通过以下步骤来运行 GitHub Actions:

  1. 将工作流程文件推送到 GitHub 仓库:在您的项目的 GitHub 仓库中创建一个名为 .github/workflows 的目录(如果目录不存在),然后创建一个 YAML 格式的工作流程文件,例如 deploy.yml。将该文件推送到 GitHub 仓库中。

  2. 触发条件:根据您在工作流程文件中定义的触发条件,当满足条件时,GitHub Actions 将自动触发运行。常见的触发条件包括代码推送、拉取请求、标签创建等。

  3. 观察运行结果:在 GitHub 仓库的 "Actions" 标签页中,您可以查看工作流程的运行状态、日志输出和任何错误信息。您还可以查看每个作业和步骤的执行情况。

请注意,GitHub Actions 只能在 GitHub 服务器上运行,而不能在本地主机上直接触发和运行。GitHub Actions 是为了实现自动化和持续集成/部署而设计的,它使用 GitHub 提供的基础设施来执行工作流程。

虽然无法在本地主机上触发和运行 GitHub Actions,但您可以通过模拟触发事件的方式来测试工作流程的行为。GitHub 提供了 "workflow_dispatch" 事件类型,您可以手动触发该事件来启动工作流程。这允许您在需要时手动运行工作流程,而不仅仅依赖于自动触发事件。

要使用 "workflow_dispatch" 事件手动运行 GitHub Actions,请执行以下步骤:

  1. 在工作流程文件中添加以下代码,定义一个接受 "workflow_dispatch" 事件的工作流程:
on:
  workflow_dispatch:
  1. 将工作流程文件推送到 GitHub 仓库。

  2. 在 GitHub 仓库的 "Actions" 标签页中,找到您的工作流程,并单击 "Run workflow" 或 "Dispatch a workflow" 按钮(具体名称可能有所不同)。

  3. 按照提示输入所需的参数(如果有),然后手动触发工作流程的运行。

通过手动触发 "workflow_dispatch" 事件,您可以在需要时灵活地运行 GitHub Actions,并测试工作流程的行为和输出。

总结来说,GitHub Actions 是在 GitHub 服务器上自动运行的,无法在本地主机直接触发和运行。但您可以使用 "workflow_dispatch" 事件手动触发工作流程的运行,以便在需要时进行测试和手动运行。

2.github actions 示例

实现 vue 项目的部署,安装依赖,打包,上传到服务器的文件夹内

  • 1.首先在 github 仓库里面的顶部菜单 action 新增 workflow(工作流),Actions => New workflow

  • 2.添加 deploy.yml

  • 3.添加密钥变量,进入该仓库的顶部菜单,Setting => Secrets and variables => Actions => Secrets => New repository secret, 新建密钥,MASECHO_SERVER_KEY,比如此 ssh 私钥,在 yml 文件中使用 secrets.MASECHO_SERVER_KEY 代替已达到保密的目的

    1. 功能描述,此功能主要为前端的打包部署,在代码 push 的时候,触发在 ubuntu 安装 node 环境,执行项目安装依赖、打包、部署到服务器上的静态文件夹
name: 部署到阿里云ssh

# 在代码push的时候触发
on:
  push:
    branches:
      - master

# 触发任务
jobs:
  deploy:
    # ubuntu系统最新
    runs-on: ubuntu-latest

    # 检出代码,是哪个分支就检出哪个分支(master)
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      # 安装node环境14版本
      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 14

      # 安装依赖
      - name: Install dependencies
        run: npm install

      # 项目打包
      - name: Build
        run: npm run build

      # 使用appleboy/ssh-action包清空文件夹
      - name: 清空服务器目标文件夹
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.MASECHO_SERVER_HOST }}
          username: ${{ secrets.MASECHO_SERVER_USERNAME }}
          key: ${{ secrets.MASECHO_SERVER_KEY }}
          script: |
            cd /usr/nginx/masecho-project/vue-front-test
            rm -rf *

      # 使用appleboy/scp-action包拷贝文件夹到服务器
      - name: 拷贝文件夹到服务器
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.MASECHO_SERVER_HOST }}
          username: ${{ secrets.MASECHO_SERVER_USERNAME }}
          key: ${{ secrets.MASECHO_SERVER_KEY }}
          source: "./dist/*"
          target: /usr/nginx/masecho-project/vue-front-test/

3.常用指令

以下是一些常用的 GitHub Actions 指令及其详细说明和示例:

  1. name

    • 说明:定义工作流程步骤的名称,用于标识和展示在 GitHub Actions 页面中。
    • 示例:
      - name: Build and Test
        run: |
          npm install
          npm run build
          npm test
      
  2. on

    • 说明:定义触发工作流程的事件,可以是 push、pull_request、schedule 等,workflow_dispatch为手动触发。
    • 示例:
      on:
        push:
          branches:
            - main
        pull_request:
          branches:
            - main
       
        workflow_dispatch:
      
  3. jobs

    • 说明:定义一个或多个工作,每个工作可以包含一系列步骤。
    • 示例:
      jobs:
        build:
          runs-on: ubuntu-latest
          steps:
            - name: Checkout code
              uses: actions/checkout@v2
            - name: Build and Test
              run: |
                npm install
                npm run build
                npm test
      
  4. steps

    • 说明:定义工作的一系列步骤,每个步骤可以包含一条或多条指令。
    • 示例:
      steps:
        - name: Checkout code
          uses: actions/checkout@v2
        - name: Build and Test
          run: |
            npm install
            npm run build
            npm test
      
  5. uses

    • 说明:引用外部的 Action,可以是 GitHub 仓库中的 Action,也可以是其他用户或组织的 Action。
    • 示例:
      steps:
        - name: Checkout code
          uses: actions/checkout@v2
        - name: Run linter
          uses: some-user/linter-action@v1
      
  6. run

    • 说明:执行 Shell 命令或脚本。
    • 示例:
      steps:
        - name: Build and Test
          run: |
            npm install
            npm run build
            npm test
      
  7. env

    • 说明:设置环境变量。
    • 示例:
      steps:
        - name: Set environment variables
          env:
            API_KEY: ${{ secrets.API_KEY }}
            DATABASE_URL: ${{ secrets.DATABASE_URL }}
          run: |
            echo $API_KEY
            echo $DATABASE_URL
      
  8. with

    • 说明:为步骤或 Action 提供参数和配置。
    • 示例:
      steps:
        - name: Deploy to staging
          uses: some-user/deploy-action@v1
          with:
            environment: staging
            token: ${{ secrets.DEPLOY_TOKEN }}
      
  9. if

    • 说明:定义条件表达式,根据条件来决定是否执行某个步骤或工作。

    • 示例:

      steps:
        - name: Build and Test
          run: |
            npm install
            npm run build
            npm test
          if: ${{ github.event_name == 'push' }}
      

10.working-directory:

  • 用于指定工作目录,在该目录下执行后续步骤的命令。

详细说明:

  • working-directory 可以用于任何包含步骤的作业(job)或步骤(step)级别。
  • 它用于更改工作目录,使得后续的命令在指定的工作目录下执行。
  • 这对于需要在特定目录下执行命令的情况非常有用,例如切换到项目的子目录或特定的构建目录。

示例:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Build and Test
        working-directory: ./backend
        run: |
          npm install
          npm test

      - name: Build Frontend
        working-directory: ./frontend
        run: |
          npm install
          npm run build

在上面的示例中,working-directory 指令被用于两个步骤。第一个步骤在 ./backend 目录下执行命令,第二个步骤在 ./frontend 目录下执行命令。这样可以确保每个步骤都在正确的目录下执行所需的操作。

Contributors: masecho