github Actions 工作流
1.github actions 介绍
GitHub Actions 是由 GitHub 提供的一项云服务,它在 GitHub 服务器上自动运行。您可以通过以下步骤来运行 GitHub Actions:
将工作流程文件推送到 GitHub 仓库:在您的项目的 GitHub 仓库中创建一个名为
.github/workflows
的目录(如果目录不存在),然后创建一个 YAML 格式的工作流程文件,例如deploy.yml
。将该文件推送到 GitHub 仓库中。触发条件:根据您在工作流程文件中定义的触发条件,当满足条件时,GitHub Actions 将自动触发运行。常见的触发条件包括代码推送、拉取请求、标签创建等。
观察运行结果:在 GitHub 仓库的 "Actions" 标签页中,您可以查看工作流程的运行状态、日志输出和任何错误信息。您还可以查看每个作业和步骤的执行情况。
请注意,GitHub Actions 只能在 GitHub 服务器上运行,而不能在本地主机上直接触发和运行。GitHub Actions 是为了实现自动化和持续集成/部署而设计的,它使用 GitHub 提供的基础设施来执行工作流程。
虽然无法在本地主机上触发和运行 GitHub Actions,但您可以通过模拟触发事件的方式来测试工作流程的行为。GitHub 提供了 "workflow_dispatch" 事件类型,您可以手动触发该事件来启动工作流程。这允许您在需要时手动运行工作流程,而不仅仅依赖于自动触发事件。
要使用 "workflow_dispatch" 事件手动运行 GitHub Actions,请执行以下步骤:
- 在工作流程文件中添加以下代码,定义一个接受 "workflow_dispatch" 事件的工作流程:
on:
workflow_dispatch:
将工作流程文件推送到 GitHub 仓库。
在 GitHub 仓库的 "Actions" 标签页中,找到您的工作流程,并单击 "Run workflow" 或 "Dispatch a workflow" 按钮(具体名称可能有所不同)。
按照提示输入所需的参数(如果有),然后手动触发工作流程的运行。
通过手动触发 "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
代替已达到保密的目的- 功能描述,此功能主要为前端的打包部署,在代码 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 指令及其详细说明和示例:
name
:- 说明:定义工作流程步骤的名称,用于标识和展示在 GitHub Actions 页面中。
- 示例:
- name: Build and Test run: | npm install npm run build npm test
on
:- 说明:定义触发工作流程的事件,可以是 push、pull_request、schedule 等,workflow_dispatch为手动触发。
- 示例:
on: push: branches: - main pull_request: branches: - main workflow_dispatch:
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
steps
:- 说明:定义工作的一系列步骤,每个步骤可以包含一条或多条指令。
- 示例:
steps: - name: Checkout code uses: actions/checkout@v2 - name: Build and Test run: | npm install npm run build npm test
uses
:- 说明:引用外部的 Action,可以是 GitHub 仓库中的 Action,也可以是其他用户或组织的 Action。
- 示例:
steps: - name: Checkout code uses: actions/checkout@v2 - name: Run linter uses: some-user/linter-action@v1
run
:- 说明:执行 Shell 命令或脚本。
- 示例:
steps: - name: Build and Test run: | npm install npm run build npm test
env
:- 说明:设置环境变量。
- 示例:
steps: - name: Set environment variables env: API_KEY: ${{ secrets.API_KEY }} DATABASE_URL: ${{ secrets.DATABASE_URL }} run: | echo $API_KEY echo $DATABASE_URL
with
:- 说明:为步骤或 Action 提供参数和配置。
- 示例:
steps: - name: Deploy to staging uses: some-user/deploy-action@v1 with: environment: staging token: ${{ secrets.DEPLOY_TOKEN }}
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
目录下执行命令。这样可以确保每个步骤都在正确的目录下执行所需的操作。