github actions 初次体验

双十一的时候,看着腾讯云有不小的折扣,本着亏死🐴哥的想法,买了一年的服务器😝html

...node

时光荏苒,一直闲置到如今...git

今天看到Gayhub的 actions 的功能,决定尝试一番,也踩了很多坑,就此记录下来github

start

什么是action

你们知道,持续集成由不少操做组成,好比抓取代码、运行测试、登陆远程服务器,发布到第三方服务等等。GitHub 把这些操做就称为 actions。 ——《GitHub Actions 入门教程》 阮一峰docker

GitHub Actions 有一些本身的术语。npm

  1. workflow (工做流程):持续集成一次运行的过程,就是一个 workflow。
  2. job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,能够完成多个任务。
  3. step(步骤):每一个 job 由多个 step 构成,一步步完成。
  4. action (动做):每一个 step 能够依次执行一个或多个命令(action)。

在github上建立项目

个人项目是基于 midway 框架的一个后端应用。ubuntu

建立 Actions

点击 Actions ,建立一个新的 workflow后端

选择nodejs的模板,按照项目自行选择,安全

这时候会看见一个yml文件,右边是 actions 的市场,我以为相似于 docker 的镜像,做用是提升复用率,减小重复劳做。bash

# 这是基础模板
# 这个 workflow 的名字,能够随意命名
name: Node.js CI

# 触发条件
on: [push]

jobs:
  # 一个名为 build 的 job
 build:
    # 虚拟机环境
 runs-on: ubuntu-latest

 strategy:
 matrix:
 node-version: [8.x, 10.x, 12.x]

 steps:
    # 一个step
 - uses: actions/checkout@v2
 - name: Use Node.js ${{ matrix.node-version }}
 uses: actions/setup-node@v1
 with:
 node-version: ${{ matrix.node-version }}
 - run: npm install
 - run: npm run build --if-present
 - run: npm test
 env:
 CI: true

复制代码

当你 push 代码的时候,github 就会开始执行这个文件定义的任务,固然这个例子不能直接知足咱们的需求,咱们须要对他进行改动。

修改 workflow

# hah, 如今看起来比以前丰满了不少
name: xxxx CI

# 触发条件修改成:当master分支,有push的时候,执行任务
on:
 push:
 branches:
 - master

jobs:
 build:
 runs-on: ubuntu-latest

 steps:
      # step1: 获取源码
 - name: chekcout 
 uses: actions/checkout@v2
      
      # step2: 将源码复制到服务器 #坑
 - name: Deploy to Server
 uses: easingthemes/ssh-deploy@v2.0.8
 env:
          # 这个地方的用法会在下面解释,简单的说就是一个变量
          # 为了安全,被写在一个其余的地方
 SSH_PRIVATE_KEY: ${{ secrets.TOKEN }}
 REMOTE_HOST: 'xxx.xx.xxx.xxx'
 REMOTE_USER: 'xxx'
 SOURCE: ''
 TARGET: '/xxxxxxx/xxxxxxx'
 ARGS: '-avzr --delete'
      
      # step3: 经过ssh链接服务器,执行安装和启动服务
      # 其实能够在github提供的虚拟机里面完成代码的打包
      # 可是node_modules太大了,个人服务及带宽过小,传输速度太慢了
 - name: start server
 uses: appleboy/ssh-action@master
 with:
 host: 'xxx.xx.xxx.xxx'
 username: 'xxx'
 key: ${{ secrets.TOKEN }}
 script: | cd /xxxxxxx/xxxxxxx npm install npm run stop npm run build npm run start 复制代码

easingthemes/ssh-deploy@v2.0.八、appleboy/ssh-action@master 使用说明

坑 —— ssh如何使用私钥登陆服务器?

这个坑不属于 actions,折腾了好久是由于easingthemes/ssh-deploy没法链接服务器。

制做密钥对

登陆服务器

[root@host ~]$ ssh-keygen  
复制代码

一路回车,会在root用户的家目录中生成一个.ssh的隐藏目录。内含两个密钥文件。id_rsa 为私钥,id_rsa.pub 为公钥。

在服务器上安装公钥
[root@host ~]$ cd .ssh
[root@host .ssh]$ cat id_rsa.pub >> authorized_keys
复制代码

为了确保链接成功,请保证如下文件权限正确:

[root@host .ssh]$ chmod 600 authorized_keys
[root@host .ssh]$ chmod 700 ~/.ssh
复制代码
设置 SSH,打开密钥登陆功能

编辑 /etc/ssh/sshd_config 文件,进行以下设置:

RSAAuthentication yes
PubkeyAuthentication yes

PermitRootLogin yes
复制代码
重启SSH服务
[root@host .ssh]$ service sshd restart
复制代码
复制私钥到github
[root@host .ssh]$ cat id_rsa
复制代码

复制文件,注意:要复制全,包括上下的 -------- BEGIN .... -----------

点击进入项目设置:

进入左侧的Secrets

添加一个 secret

name随意设置,须要和上面设置${{ secrets.TOKEN }}对应上,value就能够将上面复制的私钥放进去,如今就能够正确的链接服务器了。

结论

真香啊!😬。但愿对你们想尝试的人有帮助。整个workflow也很简陋,但愿大🔥能够提意见,让我改进。

最后发个Demo成品地址。

参考文章

相关文章
相关标签/搜索