专栏首页灵魂画师牧码持续集成利器,GitHub Actions

持续集成利器,GitHub Actions

简介

GitHub Actions 是 GitHub 推出的持续集成服务,于 2018 年 10 月推出,目前已经可以投入到正式环境中使用。

什么是持续集成呢?

回忆一下代码从开发到上线的过程,通常要经过

代码开发 -> 代码提交 -> 服务器编译、测试、打包 -> 服务器部署(大规模部署用 docker)

整个过程中,除了代码开发和代码提交这两个步骤是依赖于开发人员的。

后面的服务器编译、测试、打包和部署都是重复性工作,完全可以用程序替代,没有必要用人工去手动操作,而且如果要部署 100 台服务器,全部靠手工的话,运维人员一定会累吐血

于是为了解决上述问题,机智的程序员们发明了持续集成!

持续集成的做什么的?

持续集成的目标:代码提交之后的所有服务器编译、测试、打包和部署所有流程都自动执行。

之前通常的方案如下图所示,其中虚线框中的就是持续集成部分

可以看出来整个流程还是十分流畅的,但是其中 jenkins 是需要开发人员手工搭建的,并且要占用服务器的一定资源,有一些麻烦

那有没有更好的方案呢?那就是今天要讲的 GitHub Actions!

GitHub Actions

如何查找 actions

GitHub Actions 可以理解为提交代码到 GitHub 后 GitHub 直接提供服务器帮助你做编译、测试、打包的工作,不需要再去手工搭建任何持续集成的工具,也不需要占用自己的服务器资源做这些事情

之后每一个操作就可以理解为是一个 action,很多个操作叠加起来就是 actions

官方提供了 actions 市场,可以根据自己的需求选择,https://github.com/marketplace?type=actions

如何编写 actions

GitHub Actions 配置文件放在仓库的 .github/workflows 目录下面,以 yaml 文件的形式存在,文件名根据自己的需求命名,比如main.yml或者develop.yml

其中文件的配置项可参考 https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions 官方文档来进行编写,下面介绍一些常见的选项

  • name:name 表示当前 action 的名称,根据自己的需求进行命名
  • on:on 表示触发条件,比如当代码 push 到 master 分支的时候触发,则
on:
  push:
    branches:
      - master
  • jobs:jobs 表示实际需要执行的工作,比如下方代码,表示使用 ubuntu 执行构建工作,执行步骤上使用了 appleboy/ssh-action 这个仓库的能力
jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - name: executing remote ssh commands using password
        uses: appleboy/ssh-action@master

实例:登录服务器打包

现在有一个已经开发完成的 React 前端应用,希望每次push代码到master分支后,能够自动登录自己的服务器,拉取最新的代码并进行打包上线,应该怎么处理?

首先这里面涉及到ssh登录的问题,所以查找到了一个仓库https://github.com/appleboy/ssh-action,能够自动模拟ssh登录,按照文档建立.github/workflows/main.yml文件

name: remote ssh command
on:
  push:
    branches:
      - master
jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - name: executing remote ssh commands using password
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          password: ${{ secrets.PASSWORD }}
          command_timeout: 5m
          script: |
            cd ~/test
            git pull origin master
            yarn
            yarn build

配置文件中前面的内容很容易理解,从 with 开始的部分,涉及到登录个人服务器信息,需要使用账号和密码,那么如果将账号密码明文放在GitHub中,一定会非常不安全,GitHub也不会允许这样的事情出现,于是就有secrets配置

选择 settings->secrets,然后添加文件中的 secrets,这里的值不会被泄露出去

其中 HOST值为 IP地址,USERNAME 为用户名,PASSWORD为登录密码

比如 ssh root@10.20.0.1
HOST = 10.20.0.1
USERNAME = root
PASSWORD = ******(服务器登录密码)

根据配置文件,在登录完成后会连续执行script中的指令

script: |
  cd ~/test
  git pull origin master
  yarn build

这里的含义就是访问代码目录,拉取最新代码,然后进行打包(其中代码目录、Git、Node.js、yarn等环境要提前准备好),这样就可以仅仅通过一个yaml配置文件,结合GitHub Actions 达到目标

小结

GitHub Actions将应用版本管理和持续集成非常好的结合了起来,形成了开发部署利器。

除了上述的例子之外,还有很多功能值得探索,建议大家多多尝试,给自己的代码插上持续集成的翅膀!

- END -

本文分享自微信公众号 - 编程如画(drawcode),作者:灵魂画手大鹏

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 画解算法:14. 最长公共前缀

    https://leetcode-cn.com/problems/longest-common-prefix/

    灵魂画师牧码
  • 技巧 | 微信文章有那么多种字体?

    这两天我在 md-nice 用户群里看到有人在群里问怎么设置微信推文里的字体,恰好我前阵子刚好看过一篇关于微信推文字体排版的文章,

    灵魂画师牧码
  • MySQL开源工具推荐,有了它我卸了珍藏多年Nactive!

    最近无意间发现了一款开源免费的 MySQL 客户端管理工具,磊哥试用了两天感觉还行,所以今天推荐给各位大佬。

    灵魂画师牧码
  • 代理项 Surrogate

    代理项(Surrogate),是一种仅在 UTF-16 中用来表示补充字符的方法。在 UTF-16 中,为补充字符分配两个 16 位的 Unicode 代码单元...

    Blume
  • ​ CES中国厂商唱主角,要想成为焦点可学TCL

    文:罗超 CES(国际消费类电子产品展览会)已有47年的历史,不过中国厂商在2015年之前一直是配角,2015年却大不一样,来自深圳的公司便已占到约1/4。大家...

    罗超频道
  • 一篇文章带你学会两个场景下Selenium爬取动态网页小技巧

    selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,是爬复杂动态网页的必备工具。支持的浏览...

    Python进阶者
  • 惊呆了!!!连佛教法师都开始利用大数据!!!

    核心提示:在全世界各文化与国度都在迅速应用互联网,并已然形成另一个世界——虚拟世界的时代,舆情领域正发生着媒介“隐喻”力量的制衡与博弈,佛教界应树立“舆情意识”...

    CDA数据分析师
  • UWP 手绘视频创作工具技术分享系列 - 有 AI 的手绘视频

    AI(Artificial Intelligence)正在不断的改变着各个行业的形态和人们的生活方式,图像识别、语音识别、自然语言理解等 AI 技术正在自动驾驶...

    Shao Meng
  • 我是如何用 Webpack 虐待代码尺寸的 (第一回合)

    在说压缩之前,先说一下这个项目。这是一个手机 WAP版的 IM 在线客服页面,如图

    普通程序员
  • 联合国宣布2019年为国际本土语言年,AI可以拯救濒危语言

    随着濒危语言正在以惊人的速度消失,说濒危语言的人们纷纷求助于科技,以将其独特的语言和文化继续传递下去。

    AiTechYun

扫码关注云+社区

领取腾讯云代金券