记录第一次github action成功部署代码(失败了16次

什么是github action:

使用 GitHub Actions,您可以创建自定义的工作流程,以响应各种事件和操作。工作流程是由一个或多个任务(称为操作)组成的,这些任务在特定的事件发生时执行。这些事件可以是诸如提交代码、创建拉取请求、发布版本等与代码仓库相关的事件。
您可以在 GitHub 上的仓库中创建一个名为 .github/workflows 的目录,并在其中定义工作流程的配置文件(通常是 YAML 格式)。配置文件指定了工作流程的触发条件、要执行的操作和它们之间的依赖关系。
通过 GitHub Actions,您可以自动化各种任务,例如构建和测试代码、生成文档、部署应用程序等。您还可以结合其他工具和服务,如部署到云平台、发送通知等。

最关键的是这个东西几乎免费,每个月可以免费运行2000min:

我的github action主要想实现:当代码push 到main分支或者通过pull request合并到main分支后,通过ssh连接我的远程服务器,然后在远程服务器进行下载代码并重新运行服务。

哈哈,我改了16次,终于在第17次部署成功了。

最终的成功的github action代码如下:

yml 复制代码
name: Deploy to Server
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v2
      - name: Add SSH known hosts
        run: |
          mkdir -p ~/.ssh
          ssh-keyscan -H ${{ secrets.MY_SERVER_IP }} >> ~/.ssh/known_hosts
      - name: SSH connection to server
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.MY_SERVER_IP }}
          username: ubuntu
          key: ${{ secrets.SERVER_SSH_PRIVATE_KEY }}
          script: |
            cd code/pdd_miniprogram/server
            source ~/.nvm/nvm.sh 
            nvm use v18.15.0 
            git pull 
            npm i 
            npm run build 
            pm2 reload 0

这里的${{secret.xxx}}是在github上配置的仓库秘密变量:

为什么在chatGPT的指导下,我还会挂这么多次呢?

  1. 因为远程服务器一直都是用root角色登录的(SB如我),所以nvm,node等各种安装包都是root角色下载的,root角色才能使用,所以要么我必须再次配置各种环境变量让其他角色也能使用这些软件包,要么我允许github action 通过root角色远程连接我的服务器。

  2. 我把cd git pull npm run 等操作放在了一个新的step里面了,导致这些拉代码的操作是在github action对应的服务器执行的,而非在我的服务器执行的。

    yml 复制代码
    jobs:
      deploy:
        runs-on: ubuntu-latest
    
        steps:
          - name: Checkout Repository
            uses: actions/checkout@v2
          - name: Add SSH known hosts
            run: |
              mkdir -p ~/.ssh
              ssh-keyscan -H ${{ secrets.MY_SERVER_IP }} >> ~/.ssh/known_hosts
          - name: SSH connection to server
            uses: appleboy/ssh-action@master
            with:
              host: ${{ secrets.MY_SERVER_IP }}
              username: ubuntu
              key: ${{ secrets.SERVER_SSH_PRIVATE_KEY }}
          # 以下就是大错特错,这些都是在github 对应的服务器执行的 
          - name: Connect to Server and Download Code
            run: |
              cd code/pdd_miniprogram/server
              git pull 
              npm i 
              nvm use v18.5.0 
              npm run build 
              pm2 reload 0

我一直问chatGPT,我确定有这个文件,为啥cd不进去

后来,我才想到我可以用pwd还有ll打印一下当前到底是什么情况,处于在哪个位置,然后就发现为啥和我github项目一样呢,这才意识到处于运行github action的服务器。

所以最终把我需要在远程服务器运行的命令,放在SSH connection to server这一步的script下执行就解决了。

  1. 除了这些问题外,还有ssh连接我的服务器后,找不到 nvm 命令,所以就加了一行:

    yml 复制代码
    source ~/.nvm/nvm.sh  # 显式地加载 nvm 环境变量

总之,历经3个小时,终于把第一个action跑成功了。

参考:youtu.be/yfBtjLxn_6k

项目代码:github.com/liujiaqi222...

相关推荐
kyriewen10 小时前
奥特曼借GPT-5.5干杯,而你的Copilot正按Token收钱
前端·github·openai
jinanwuhuaguo12 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw
DogDaoDao13 小时前
【GitHub】andrej-karpathy-skills:让 AI 编程助手告别三大通病
人工智能·深度学习·程序员·大模型·github·ai编程·andrej-karpathy
Shin_chan15 小时前
Linux 内核史诗级提权漏洞:CVE-2026-31431 复现与分析
github
CoderJia程序员甲17 小时前
GitHub 热榜项目 - 日榜(2026-05-03)
ai·大模型·llm·github·ai教程
yyuuuzz19 小时前
aws 基础认知与实践注意点
运维·服务器·网络·云计算·github·aws
weixin_5142531819 小时前
430-github-aguvis tmux
github
阿里嘎多学长20 小时前
2026-05-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管
努力努力再努力wz20 小时前
【MySQL进阶系列】一文打通事务机制:从锁、Undo Log 到 MVCC 与隔离级别
c语言·数据结构·数据库·c++·mysql·算法·github
庚昀◟21 小时前
腾讯云 CVM + Docker + Jenkins + GitLab CI/CD 全流程指南(python、flask实现简单计算器)
python·ci/cd·docker·flask·jenkins