关于github-actions:使用github-actions部署代码

6次阅读

共计 1817 个字符,预计需要花费 5 分钟才能阅读完成。

背景

最近写了个工具,须要在服务端运行,一开始间接应用 transmit 上传代码,然而每次更新代码都要同步,而且因为服务器在国外,速度贼慢,所以趁着放假搞了下代码主动部署。

要实现的性能

之前用过 Github 的 Webhooks 做过主动部署,原理就是本人服务器上启动一个服务,对外裸露一个接口,每次代码 push 到 github 时,github 服务器会调用你的接口,收到申请后再执行代码部署。
这次决定换用 Actions 实现一个相似的性能,原理相似,代码 push 到 github 时,github 服务器会执行你预设好的步骤,部署代码。要实现的性能就是:

  1. push 代码
  2. github actions runner 登录本人的服务器
  3. 切到目录,拉取代码,重启服务

步骤

首先要实现登录服务器,用账户明码天然能够,然而不太平安,所以采纳 SSH 密匙登录的形式,步骤如下(参考 mac 免密 ssh 登陆配置不坑指南):

  1. 本地创立公私匙对(集体感觉新建一个专用的匙对比拟好):

    ssh-keygen -t rsa -C "github actions"
  2. 上传公匙到服务器

    ssh-copy-id -i [公钥文件] user@host 
    # user 是你的 ssh 的用户,host 是服务器地址,这时候还要输出明码。# 例子:ssh-copy-id -i id_rsa.pub root@111.111.111.111
  3. ssh-add(mac 的坑点)

    好个别别的零碎到这就能够免密登陆了,然而 mac 并不这样。还要调用 ssh-add

    ssh-add -K [你的私钥文件,就是那个不加.pub 结尾的文件] 
    # 例如,ssh-add -K id_rsa

    这时候就能够间接应用 ssh user@host 登录服务器了,如果你想,服务器 IP 每次都得手动输出,记不住,有没有更好的形式了?答案是,有。
    以下可选,而且与本文的次要目标(部署代码)无关,参考 mac ssh 免密登录 连贯近程服务器

  4. 在.ssh 目录下创立一个 config 文件, 写入

    Host alias-name    # 别名,这里举例为 alias-name
    HostName 111.111.111.111   # 要登录服务器域名或 IP
    Port 22                    # 要登录服务器的端口   
    User root                  # 要登录服务器的用户名

    设置胜利后就能够间接应用 ssh alias-name 登录服务器了!

  5. 在 github 仓库中增加私匙
    咱们须要给 github 服务器受权在本人的服务器上执行一些命令,所以须要给它受权,把私匙给它。必定不能明文写在代码里,放在那里呢?答案是 Secrets 中。在仓库的 Settings 中,将步骤 1 中生成的私匙增加到 Secrets 中(留神增加时 Name 是前面 actions 中要用到的)。个别会把私匙、服务器 Host、服务器 User 都增加到 Secrets 中,这样,如果后续更改服务器或者登陆用户时就不须要改代码了。
2. 编写 Actions 文件

参考 1:GitHub Actions 入门教程
参考 2:应用 GitHub Actions 实现博客自动化部署

具体过程不表,我的是这样的

name: deploy
on:
 push:
    branches: [master]
  pull_request:
    branches: [master]
  # Allows you to run this workflow manually from the Actions tab
 workflow_dispatch:
jobs:
 deploy:
 runs-on: ubuntu-latest
 steps:
      - name: executing remote ssh commands
        
        # 应用 appleboy/ssh-action@master 来执行命令
        uses: appleboy/ssh-action@master
        with:
          host: ${{secrets.DEPLOY_HOST}}
          username: ${{secrets.DEPLOY_USER}}
          key: ${{secrets.DEPLOY_SECRET}}
          script: cd </your/code/path> && git pull && npm install && <restart your service>

其中 </your/code/path><restart your service>替换为本人的就能够了。
须要留神的时,其实没有方法间接让 github actions runner 间接登录咱们的服务器并执行命令,所以须要应用 appleboy/ssh-action@master 封装的 actions。

OK,大工告成!

正文完
 0