Skip to content

GitHub Actions核心工作流与避坑手册

About 1602 wordsAbout 5 min

gitgithubactions

2025-06-01

GitHub Actions作为事件驱动的自动化平台,可无缝集成代码开发到部署的全流程。本文详解:

  • 核心概念:Workflow文件结构、Job/Step依赖关系、Runner运行机制
  • 高阶实战:多环境矩阵构建(matrix)、密钥安全管理(Secrets)、自定义Docker容器
  • 工程化落地:自动化测试→容器镜像构建→多云部署流水线设计
  • 效能提升:缓存优化加速CI、审批工作流、问题自动跟踪 通过YAML配置替代Jenkins等工具,实现轻量化、可追溯的云原生CI/CD。

一、对Action的yml配置文件有一个简单的理解

下面是一个从官网markplace里面找的一个action的配置文件,是一个对vue项目进行CI的配置文件,我们以这个来学习action中的各个变量的含义。

具体变量含义,可以参考:

二、配置隐私内容变量

我们会用到github token(如:secrets.ACTION_GITHUB_TOKEN ),但是如果直接硬编码到文件里面,感觉有点不安全,这里就可以设置secrets

在项目的setting里面,找到Actions添加。

image-20250601180051546

三、典型生态项目

3.1、actions/checkout

actions/checkout 是一个常用的 GitHub Action,用于检出仓库代码。

- uses: actions/checkout@v2

3.2、actions/setup-node

actions/setup-node 用于设置 Node.js 环境。

- uses: actions/setup-node@v2
  with:
    node-version: '14'

3.3、actions/upload-artifact

actions/upload-artifact 用于上传构建产物。

- uses: actions/upload-artifact@v2
  with:
    name: my-artifact
    path: path/to/artifact

3.4、easingthemes/ssh-deploy

ssh-deploy是一个ssh工具,通过ssh协议连接服务器,然后可以通过scp等命令实现文件上传。

例如:

      - name: Deploy wiki to Server
        uses: easingthemes/ssh-deploy@v2.1.5
        env:
        	# 在GitHub仓库的Settings -> Secrets中设置你的SSH密钥
          SSH_PRIVATE_KEY: ${{ secrets.ALIYUN_SSH_PRIVATE_KEY }} 
          ARGS: "-rltgoDzvO --delete" # rsync参数,用于同步文件并删除目标服务器上不存在的文件
          SOURCE: "wiki/.vuepress/dist/" # 要上传的目录,这里是构建后的dist目录
          REMOTE_HOST: ${{ secrets.REMOTE_HOST }} # 你的服务器IP或域名
          REMOTE_USER: ${{ secrets.REMOTE_USER }} # 服务器上的用户名,通常是ubuntu或root等
          # 在服务器上的目标目录路径,例如 /var/www/html/myproject/dist/
          TARGET: ${{ secrets.REMOTE_TARGET_FOR_WIKI }}

配置里面有对每个参数的含义,这里就不过多说明,简单说一下如何配置:

参考:ssh deployments

  • 1、使用ssh-keygen -m PEM -t rsa -b 4096 在服务器上面生成公钥和私钥
  • 2、将公钥内容复制到文件 ~/.ssh/authorized_keys文件下面,如果没有可以创建一个
  • 3、在Github代码仓库的setting下,找到Secrets and Variables,Actions下面配置变量
    • 定义:ALIYUN_SSH_PRIVATE_KEY(名称随意取,在使用的时候对应上既可以),内容是刚才生成的SSH私钥内容
    • 定义:REMOTE_HOST (域名或者IP)
    • 定义:REMOTE_USER(用户名,应该是要和生成密钥的用户一致)
    • 定义:REMOTE_TARGET_FOR_WIKI(文件上传的目录地址)

image-20250912113802613

四、实际案例

4.1、Vue项目使用Actions打包并推送到指定服务目录

4.2、Github Person Page

profile-3d.yml

snake.yml

注意点:

  • 1、需要将package.json的lock文件上传上去,pnpm的话就是pnpm-lock.yaml文件

参考:

Changelog

10/10/25, 3:04 PM
View All Changelog
  • 1ee1e-feat(wiki): algo -on

求求了,快滚去学习!!!

求求了求求了,快去学习吧!

【题单】贪心算法

不知道方向的时候,可以多看看书,书会给你指明下一步该干什么,加油!