双十一的时候,看着腾讯云有不小的折扣,本着亏死🐴哥的想法,买了一年的服务器😝html
...node
时光荏苒,一直闲置到如今...git
今天看到Gayhub的 actions 的功能,决定尝试一番,也踩了很多坑,就此记录下来github
你们知道,持续集成由不少操做组成,好比抓取代码、运行测试、登陆远程服务器,发布到第三方服务等等。GitHub 把这些操做就称为 actions。 ——《GitHub Actions 入门教程》 阮一峰docker
GitHub Actions 有一些本身的术语。npm
个人项目是基于 midway 框架的一个后端应用。ubuntu
点击 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 就会开始执行这个文件定义的任务,固然这个例子不能直接知足咱们的需求,咱们须要对他进行改动。
# 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 复制代码
这个坑不属于 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
复制代码
编辑 /etc/ssh/sshd_config 文件,进行以下设置:
RSAAuthentication yes
PubkeyAuthentication yes
PermitRootLogin yes
复制代码
[root@host .ssh]$ service sshd restart
复制代码
[root@host .ssh]$ cat id_rsa
复制代码
复制文件,注意:要复制全,包括上下的 -------- BEGIN .... -----------
。
点击进入项目设置:
进入左侧的Secrets
添加一个 secret
name随意设置,须要和上面设置${{ secrets.TOKEN }}
对应上,value就能够将上面复制的私钥放进去,如今就能够正确的链接服务器了。
真香啊!😬。但愿对你们想尝试的人有帮助。整个workflow也很简陋,但愿大🔥能够提意见,让我改进。
最后发个Demo成品地址。