Github Actions 实践

Github Actions 是 Github 的持续集成服务,通过在 repo 发生特定的行为时执行指定的命令实现自动测试、自动部署等功能。

基本术语

  1. workflow:一次持续集成运行的过程
  2. job:一个workflow由一个或多个job构成
  3. step:一个job由一个或多个step构成,分步完成一个任务
  4. action:一个step可以依次执行一个或多个action

workflow 文件

启用 Github Actions 需要在代码仓库中的 .github/workflows 目录中创建 workflow 文件。workflow 文件的格式是 .yml,只要在该目录下存在 .yml 文件,Github 就会尝试根据此文件执行相应的命令。

workflow 文件的配置字段比较复杂,囿于篇幅,可参考官方文档进行学习与配置。

Django 实践

对于基于 Django 的服务器后端,使用 Github Actions 可以减少用于测试与部署的时间。

基于 Docker 的示例如下

  1. # workflow 名字为 Django CI
  2. name: Django CI
  3. # 当 push 或 pull request 行为发生时触发该 workflow
  4. on: [push, pull_request]
  5. jobs:
  6. build:
  7. # 基于容器 ubuntu-latest 进行构建
  8. runs-on: ubuntu-latest
  9. strategy:
  10. max-parallel: 4
  11. matrix:
  12. # 使用的环境,此处是 python 3.7
  13. python-version: [3.7]
  14. services:
  15. # 使用的其他容器,此处使用了 Postgresql
  16. postgres:
  17. image: postgres:10
  18. env:
  19. POSTGRES_USER: postgres
  20. POSTGRES_PASSWORD: postgres
  21. POSTGRES_DB: github_actions
  22. ports:
  23. - 5432:5432
  24. options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
  25. steps:
  26. # 检出代码
  27. - uses: actions/checkout@v2
  28. # 安装相应 python 版本
  29. - name: Set up Python ${{ matrix.python-version }}
  30. uses: actions/setup-python@v1
  31. with:
  32. python-version: ${{ matrix.python-version }}
  33. # 安装 psycopg2 依赖
  34. - name: Psycopg2 Prerequisites
  35. run: sudo apt-get install python-dev libpq-dev
  36. # 安装 python 依赖
  37. - name: Install Dependencies
  38. run: |
  39. python -m pip install --upgrade pip
  40. pip install -r requirements.txt
  41. # Django 的 migrate 操作
  42. - name: Migrations
  43. run: |
  44. python manage.py makemigrations
  45. python manage.py migrate
  46. # 执行测试
  47. - name: Run Tests
  48. run: |
  49. python manage.py test --with-coverage --cover-package=myapp
  50. # 上传到 Docker Registry
  51. - name: Publish to Registry
  52. uses: elgohr/Publish-Docker-Github-Action@master
  53. with:
  54. name: user/myapp
  55. usename: user
  56. # 使用 repo 中的 secrets 项
  57. password: ${{ secrets.docker_password }}
  58. dockerfile: Dockerfile
  59. - name: Docker-Compose Action
  60. uses: appleboy/ssh-action@master
  61. with:
  62. host: ${{ secrets.HOST }}
  63. username: ${{ secrets.USERNAME }}
  64. password: ${{ secrets.PASSWORD }}
  65. port: ${{ secrets.PORT }}
  66. script: |
  67. cd myapp && docker-compose pull && docker-compose up -d

如果服务器访问 Docker Registry 缓慢,可以尝试使用 rsync 进行文件复制,并在本地构建 Docker 镜像。

  1. - name: Rsync to Server
  2. uses: AEnterprise/rsync-deploy@master
  3. env:
  4. DEPLOY_KEY: ${{ secrets.SERVER_SSH_KEY }}
  5. ARGS: "-e -c -r --delete"
  6. SERVER_PORT: ${{ secrets.PORT }}
  7. FOLDER: "./"
  8. SERVER_IP: ${{ secrets.IP }}
  9. USERNAME: ${{ secrets.USERNAME }}
  10. SERVER_DESTINATION: ${{ secrets.SERVER_DESTINATION }}
  11. - name: Docker-Compose Action
  12. uses: appleboy/ssh-action@master
  13. with:
  14. host: ${{ secrets.HOST }}
  15. username: ${{ secrets.USERNAME }}
  16. password: ${{ secrets.PASSWORD }}
  17. port: ${{ secrets.PORT }}
  18. script: |
  19. cd myapp && docker-compose build && docker-compose up -d

查看 Github Actions 运行情况

在 Github 仓库主页面中,有一项 Actions,里面即 Github Actions 所有的运行情况,包含着每个 workflow 的每次运行记录,可以及时追溯过去的问题。

Github Actions 实践的更多相关文章

  1. Github Packages和Github Actions实践之CI/CD

    概述 Github在被微软收购后,不忘初心,且更大力度的造福开发者们,推出了免费私有仓库等大更新.近期又开放了packages和actions两个大招,经笔者试用后感觉这两个功能配合起来简直无敌. G ...

  2. 基于Github Actions + Docker + Git 的devops方案实践教程

    目录 为什么需要Devops 如何实践Devops 版本控制工具(Git) 学习使用 配置环境 源代码仓库 一台配置好环境的云服务器 SSH远程登录 在服务器上安装docker docker技术准备工 ...

  3. Github原生CI/CD,初尝Github Actions

    Github 原生 CI/CD,初尝 Github Actions Intro Github 目前已经推出了自己的 CICD 服务 -- Github Actions,而且比微软的 Azure Dev ...

  4. 使用.NET 6开发TodoList应用(31)——实现基于Github Actions和ACI的CI/CD

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求和目标 在这个系列的最后一节中,我们将使用GitHub Actions将TodoList应用部署到Azure Container ...

  5. 使用Linux、Nginx和Github Actions托管部署ASP.NET Core 6.0应用

    使用Linux.Nginx和Github Actions托管部署ASP.NET Core 6.0应用 前言 本文主要参考微软这篇文档而来 Host ASP.NET Core on Linux with ...

  6. 用GitHub Actions自动部署Hexo

    什么是 GitHub Actions ? GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,GitHub 于 2018 年 10 月推出,正式版于 2019 年 11 月正式 ...

  7. GitHub的实践

    GitHub的实践 2017-05-08,晴,来小米已经一周的时间了,感谢领导能给我一周的时间来熟悉 ubuntu.spring boot.maven.docker.github .大家会问,这些不都 ...

  8. React + Node 单页应用「二」OAuth 2.0 授权认证 & GitHub 授权实践

    关于项目 项目地址 预览地址 记录最近做的一个 demo,前端使用 React,用 React Router 实现前端路由,Koa 2 搭建 API Server, 最后通过 Nginx 做请求转发. ...

  9. GitHub Actions 完成CI CD

    在之前我的部署.版本控制.CI.CD都是在Jenkins 下来完成的 在前几天看到github上的一个新玩具actions,简直惊为天人 它能在你的仓库触发事件(Push,Pull,issue,... ...

随机推荐

  1. wrap()包裹被选元素的内容

    <!doctype html><html><head><meta charset="utf-8"><title>修改代码 ...

  2. Axis <=1.4 RCE 复现

    1.环境搭建 在idea 上新建项目,然后用tomcat运行即可 2.漏洞复现 2.1 freemarker.template.utility.Execute 如果项目里面没有freemarker 就 ...

  3. WPF 过渡效果

    http://blog.csdn.net/lhx527099095/article/details/8005095 先上张效果图看看 如果不如您的法眼 可以移步了 或者有更好的效果 可以留言给我 废话 ...

  4. axios与vue-resource

    在Vue项目中前后端交互时,早期Vue使用Vue-resource实现异步请求.从Vue2.0之后就不再对vue-resource进行更新,Vue官方推荐使用axios. vue-resource V ...

  5. PHP中类的自动加载

    在之前,我们已经学习过Composer自动加载的原理,其实就是利用了PHP中的类自动加载的特性.在文末有该系列文章的链接. PHP中类的自动加载主要依靠的是__autoload()和spl_autol ...

  6. IDEA - 2019中文版安装教程

    前言 个人安装备忘录 软件简介 IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持. ...

  7. JDBC-2(CRUD)

    3.PreparedStatement实现CRUD 3.1 操作和访问数据库 数据库连接被用于向数据库服务器发送命令和SQL语句,接受数据库服务器返回的结果.(一个数据库连接就是也给Socket连接) ...

  8. fliebeat配置手册

    1.  关于Filebeat 当你要面对成百上千.甚至成千上万的服务器.虚拟机和容器生成的日志时,请告别 SSH 吧!Filebeat 将为你提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情 ...

  9. 定要过python二级 真题 第四套

    第一模块  基本操作 1.print("  {  }    " . format(s))         记住        "  {        }"    ...

  10. P4643-[国家集训队]阿狸和桃子的游戏【结论】

    正题 题目链接:https://www.luogu.com.cn/problem/P4643 题目大意 给出\(n\)个点\(m\)条边的无向图,两个人轮流选择一个未被选择的点加入点集. 然后每个人的 ...