前言

在以前,我们发布代码都是在本地先将代码编译打包压缩好好,然后借助 xshell 等工具登录服务器,将压缩好的代码拷贝到服务器目录,解压执行。但是这种方式是繁琐低效的。而且,直接登录服务器进行操作有很大的风险。随着 DevOps 的兴起,出现了持续集成,持续交付(CI/CD)和持续部署的新方法,开发人员只需要通过工具定义好整个软件打包发布的流水线(Pipeline)就可以实现自动化。

那么,通过什么软件去定义这个流水线,就是下面我要介绍的 github 提供的 Actions 模块功能。

actions 配置文件

actions 的配置文件存放在代码仓库的.github/workflows目录。是一个yml文件,名字可以自定义。

配置字段

  • name:工作流(Workflows)的名字,你可以定义多个流水线,名字可以帮助你区分。

  • on:Workflows 触发的时机,一般是 push 和 pr 到指定分支时触发。

  • runs-on:工作流执行的虚拟机环境。

  • job:任务,一个 Workflows 可由一个或多个 job 组成。

  • step:步骤,每个 job 可由一个或多个 step 组成。

  • use:在执行 step 时,你可以使用别人定义好的 actions

  • run:在执行 step 时,执行 run 对应的 shell 命令

下面是我目前配置的 Workflows

name: vpBlog# Controls when the action will run. Triggers the workflow on push or pull request# events but only for the master branchon:  push:    branches: [master]  pull_request:    branches: [master]# A workflow run is made up of one or more jobs that can run sequentially or in paralleljobs:  # This workflow contains a single job called "build"  build:    # The type of runner that the job will run on    runs-on: ubuntu-latest    # Steps represent a sequence of tasks that will be executed as part of the job    steps:      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it      - uses: actions/checkout@v2      - name: Install Node.js        uses: actions/setup-node@v1        with:          node-version: "10.x"      - name: install dependencies        run: npm install      # Runs a single command using the runners shell      - name: build project        run: npm run build      - name: Deploy to Server        uses: easingthemes/ssh-deploy@v2.1.1        env: # 以下为参数          SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_SSH_KEY }}          ARGS: "-rltgoDzvO --delete"          REMOTE_USER: ${{ secrets.DEPLOY_USER }} # 为了用户信息安全对敏感数据可以在secrets中配置          REMOTE_HOST: ${{ secrets.DEPLOY_HOST }}          SOURCE: ".vuepress/dist"          TARGET: "/usr/share/nginx/html

secrets 配置

上面配置中你一定很好奇secrets.DEPLOY_SSH_KEY是如何获取的。下面就可以解答你的疑惑。

相信秘钥,服务器地址这些敏感信息,你一定不希望被别人看到。所以 github 也贴心的提供了 secrets 模块配合 actions 使用。

具体配置方法可以看下图

工作流配置

每个人在发布前可能会执行 eslint 检查,或者跑单元测试,然后在执行 build,这里不展开讲了。最终的目的是要将代码发布到指定的服务器上。下面就来说下这步怎么做。

其实也不复杂,是借助了easingthemes/ssh-deploy这个开源的 action,其原理也是使用rsync这个工具实现数据传输。

- name: Deploy to Server    uses: easingthemes/ssh-deploy@v2.1.1    env: # 以下为参数        SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_SSH_KEY }}        ARGS: "-rltgoDzvO --delete"        REMOTE_USER: ${{ secrets.DEPLOY_USER }}        REMOTE_HOST: ${{ secrets.DEPLOY_HOST }}        SOURCE: '.vuepress/dist'        TARGET: '/usr/share/nginx/html'

服务器配置

由于rsync是借助秘钥实现通过 ssh 进行传输。所以在服务器上需要做一些配置。

创建秘钥

ssh-keygen -m PEM -t rsa -b 4096

在服务器上安装公钥

cat .ssh/id_rsa.pub >> .ssh/authorized_keys

编辑 /etc/ssh/sshd_config 文件,开启服务器允许通过秘钥登录

RSAAuthentication yesPubkeyAuthentication yes

因为我是直接使用 root 账号,所以还要开启允许 root 通过 ssh 登录

PermitRootLogin yes

重启 ssh 服务器

service sshd restart

最后将私钥(id_rsa )中的内容保存到 secrets

总结

因为都是静态文件所以直接拷贝到 nginx 目录就可以直接运行了,所以相对比较简单。如果是服务端还需要涉及到执行重启等功能。

下面放一个执行成功的 actions

秘钥对使用_使用gitactions持续集成项目实例相关推荐

  1. ci持续集成工程师前景_不要忽视持续集成(CI)/持续交付(CD)的13个优势

    原标题:不要忽视持续集成(CI)/持续交付(CD)的13个优势 持续集成(CI)/持续交付(CD)是现代软件开发周期的基础,人们需要了解持续集成(CI)/持续交付(CD)和其管道实施的所有好处. 在传 ...

  2. windows配置gitlab秘钥并测试_你了解多少Linux系统GitLab安装与环境配置?

    Linux系统GitLab安装与环境配置 注意:虚拟机的内存至少2G以上 一. 从GitLab官网获取安装方法和步骤: https://about.gitlab.com/installation/#c ...

  3. bat窗口大小设置_如何将U盘设置成我们计算机的开机秘钥,对电脑加密。

    在日常工作中,当我们电脑中有重要文件的时候,电脑安全就成了我们关注的问题,所以常常我们会给我们的电脑设置开机密码,但是尽管我们设置了口令,但还是不能保证我们电脑不受非法入侵.今天小编教大家用我们的U盘 ...

  4. python对称加密_【Python】 基于秘钥的对称加密

    [Crypto] 关于用python进行信息的加密,类似的解决方案有很多比如用base64编码进行encode,再或者是hashlib来进行hash.但是还缺少一种明明场景很简单的解决方案,就是把利用 ...

  5. java支付宝当面付接口_支付宝当面付秘钥生成教程(加对接案例)

    总是有小伙伴犯愁支付宝当面付的秘钥生成,看着挺高大上,实际上不是很麻烦,给大家分享一下生成过程,以及对接我们伟大的sspanel的方法 准备 开通了支付宝当面付的账号一枚(本人代开,50大洋,地址:联 ...

  6. exure9 秘钥_AxureRP9.0秘钥(持续更新)

    Axure RP 9.0.0.3717-3719 正式版 Axure Enterprise Edition Licensee :Freecrackdownload.com KEY:5vYpJgQZ43 ...

  7. JAVA_KEYTOOL_生成秘钥_一蓑烟雨任平生

    项目场景: 项目中需要秘钥加密,Java开发使用jdk生成最方便 问题描述 生成代码如下 在cmd中执行JDK中keytool的命令: # keytool -genkeypair -alias zha ...

  8. SSH HTTPS 公钥、秘钥、对称加密、非对称加密、 总结理解

    2019独角兽企业重金招聘Python工程师标准>>> 作者:shede333 主页:http://my.oschina.net/shede333 && http:/ ...

  9. md5加密解密代码_Python内置方法实现基于秘钥的信息加解密

    点击关注州的先生 精彩不容错过 在实际编程开发中,我们会使用到各类的加密算法来对数据和信息进行加密.比如密码中比较常见的MD5加密,以及AES加密等等.对于密码认证来说,MD5加密是比较适合的,因为其 ...

最新文章

  1. 全面分析Web应用程序安全漏洞——《黑客攻防技术宝典:web实战篇》
  2. 计算机基础课教学心得,计算机基础教学心得
  3. 大学计算机无线论文范文大全,大学计算机论文范文
  4. Nginx模拟负载均衡
  5. 事务的隔离级别(Transaction isolation levels)5
  6. 艾伟:WM有约(一):你好,CF
  7. usermod+用户密码管理+mkpasswd
  8. 微信小程序this.setData如何修改对象、数组中的值
  9. pp助手苹果版本_PP助手、百度助手相继下线,越狱时代宣告落幕,你曾越狱过吗?...
  10. VBA InStr 函数
  11. mui.ajax ie8,IE8+MVVM的适配方案尝试
  12. 【UV打印机】PrintExp打印软件教程(六)-高级模式(马达)
  13. 计算机采取二进制的原因,计算机为什么采用二进制
  14. 《企业管理学》管理理论的产生于发展知识点总结
  15. Android 7.1 亮度调节之BrightnessController
  16. 男人副业做什么好?男生适合做啥副业?男士副业都有什么
  17. with dlz mysql 条件_BIND+DLZ+MYSQL
  18. 当一个SQL语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序...
  19. HDU 5148 Cities
  20. GNN:A Gentle Introduction to Graph Neural Networks

热门文章

  1. Android4.4.2KK竖屏强制更改为横屏的初步简略方案
  2. 给技术人上的管理课:平衡和集中
  3. ug11许可证文件路径安装在哪_Matlab2012a安装教程
  4. 五分钟创建一个自己的NPM包
  5. 仅仅用几行python代码偷偷复制U盘文件
  6. JAVA WEB部分易混淆问题总结
  7. 快速搭建一个restful风格的springboot项目
  8. Android 为什么要有handler机制?handler机制的原理
  9. oracle中避免sort操作
  10. Powershell管理系列(二十五)PowerShell操作之获取AD账号及邮箱信息