github Actions 是什么鬼?不管是什么鬼,盘~~~

727 阅读3分钟

最近惊闻一同事说github可以做CI/CD了,叫做github actions。Google一番,开始盘她。

1,创建自己项目的workflows

  • 打开github.com(自己注册的),选择一个你自己的项目仓库, 点击Actions,可选择set up a workflow yourself也可以选择使用别人创建好的,果断start commit。(果断自己创建呀,我那么好学~~~)
  • 创建完成后会发现在项目中多了一个.github/workflows文件夹, 打开.yml文件可以看到里面默认的,不用管,一键delete,从头开干。

2,如何编写.yml 文件?

  • 文件基本结构
  1. workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
  2. job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
  3. step(步骤):每个 job 由多个 step 构成,一步步完成。
  4. action (动作):每个 step 可以依次执行一个或多个命令(action)。
  • 我举一个前端资源同步服务器的案例,一般分为,提交代码,打包,同步到云服务器等几个步骤。不多说直接上代码~
# 这里是你workflows的名称,不用多说
name: "Deploy to tencentyun"

# 动作,也是就是触发workflow的动作片, 
# 我这里是我个人项目只有我一个人开发,所以不用特定某一分支
on: push

# 指定分支,指定动作的写法, 其他写法可以参考官网
# on:
#    push:
#        branches: 
#         - master

# 执行的任务
jobs: 
  # 任务一及名称
  build-and-deploy:
    # 执行任务的环境,我这里使用ubuntu-latest
    runs-on: ubuntu-latest

    # 执行步骤
    steps:
      # 检出你的代码库, 这一步非常重要,不写这一步会报找不到packjson文件,因为job是在虚拟机上跑的,文件路径跟你项目路径不一样。
      - name: Checkout repository  code
        uses: actions/checkout@v2

      # 可以指定使用 node版本,我这里使用 12.x, 也可不指定,忽略
      - name: use Node.js 12.x
        uses: actions/setup-node@v1
        with:
          node-version: "12.x"
    # 缓存可减少ci时间
     - name: Cache node_modules
        uses: actions/cache@v2
        id: cache-packages
        env: 
          cache-name: cache-node-modules
        with: 
          # npm cache files are stored in `~/.npm` on Linux/macOS
          path: |
            node_modules
            */*/node_modules
          key: ${{ runner.os }}-packages-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-packages-${{ env.cache-name }}-
            ${{ runner.os }}-packages-
            ${{ runner.os }}-
      
      # 安装node_modules
      - name: Install dependencies
        if: steps.cache-packages.outputs.cache-hit != 'true'
        run: npm install

      # 执行npm run build
      - name: Npm run build
        run: npm run build
        env:
          CI: true
      
      # Deploy 部署
      - name: Deploy to Server
        uses: easingthemes/ssh-deploy@v2.0.7
        env: 
    
          SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_SSH_KEY }}
          ARGS: "-avz --delete"
          SOURCE: "dist/"
          REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
          REMOTE_USER: ${{ secrets.REMOTE_USER }}
          TARGET: ${{ secrets.REMOTE_TARGET }}

    # 任务二
    # ......
    
    # 任务N....

  1. DEPLOY_SSH_KEY 这里存的你服务器上设置的ssh的私钥部分
  2. REMOTE_HOST 服务器的IP或者域名
  3. REMOTE_USER 服务器的用户名
  4. REMOTE_TARGET 你要部署的资源放到在服务器某个位置的路径

3,github actions连接云服务器

  • 首先要在服务器上生成ssh密钥,通过命令ssh-keygen -t rsa -b, 如果不知道改命令是什么意思,可以自行Google。 可以看到生成了deploy(私钥),deploy.pub(公钥)和.ssh文件夹
  • 打开github找到项目,找到settings, 将服务器ssh的私钥,host,用户名,资源存放路径等存放在项目的settings>Secrets下
  • 打开服务器,将ssh公钥放到/root/.ssh/authoriaed_keys中,保存。
  • 此时已经将github actions和服务器建立连接了

4,测试

  • git push一个试试,完美运行,真香。
  • 同步资源成功

参考:ssh-deploy

参考:官方文档

参考: cache