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 的示例如下

# workflow 名字为 Django CI
name: Django CI
# 当 push 或 pull request 行为发生时触发该 workflow
on: [push, pull_request] jobs:
build:
# 基于容器 ubuntu-latest 进行构建
runs-on: ubuntu-latest
strategy:
max-parallel: 4
matrix:
# 使用的环境,此处是 python 3.7
python-version: [3.7]
services:
# 使用的其他容器,此处使用了 Postgresql
postgres:
image: postgres:10
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: github_actions
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps:
# 检出代码
- uses: actions/checkout@v2
# 安装相应 python 版本
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}
# 安装 psycopg2 依赖
- name: Psycopg2 Prerequisites
run: sudo apt-get install python-dev libpq-dev
# 安装 python 依赖
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
# Django 的 migrate 操作
- name: Migrations
run: |
python manage.py makemigrations
python manage.py migrate
# 执行测试
- name: Run Tests
run: |
python manage.py test --with-coverage --cover-package=myapp
# 上传到 Docker Registry
- name: Publish to Registry
uses: elgohr/Publish-Docker-Github-Action@master
with:
name: user/myapp
usename: user
# 使用 repo 中的 secrets 项
password: ${{ secrets.docker_password }}
dockerfile: Dockerfile
- name: Docker-Compose Action
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: ${{ secrets.PORT }}
script: |
cd myapp && docker-compose pull && docker-compose up -d

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

- name: Rsync to Server
uses: AEnterprise/rsync-deploy@master
env:
DEPLOY_KEY: ${{ secrets.SERVER_SSH_KEY }}
ARGS: "-e -c -r --delete"
SERVER_PORT: ${{ secrets.PORT }}
FOLDER: "./"
SERVER_IP: ${{ secrets.IP }}
USERNAME: ${{ secrets.USERNAME }}
SERVER_DESTINATION: ${{ secrets.SERVER_DESTINATION }}
- name: Docker-Compose Action
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: ${{ secrets.PORT }}
script: |
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. MapperScannerConfigurer之sqlSessionFactoryBeanName注入方式

    Spring整合Mybatis时,项目启动时报错:(MapperScannerConfigurer之sqlSessionFactoryBeanName注入方式) pringframework.bean ...

  2. C语言实现线程池功能

    1. 线程池基本原理 2. 线程池C语言实现 2.1 线程池的数据结构 #include <stdio.h> #include <pthread.h> #include < ...

  3. windows系统框架

  4. JS014. toFixed( )调试踩坑 - 浏览器思维 点常量 & 点运算符

    Number.prototype.toFixed( ) 在观察toFixed()丢失精度问题,和对toFixed()方法重写的调试过程时,发现toFixed()对Number的识别有它自己的规则,并找 ...

  5. Linux的基础指令(二)

    目录:   一.列表显示目录内容-ls    二.设置别名-alias      三.统计目录及文件空间占用情况-du       四.创建新目录 -mkdir          五.创建空文件-to ...

  6. select后给字段起别名,where和group后不能用,但having后可以

    为什么mysql having的条件表达式可以直接使用select后的别名? SQL语句的语法顺序: FROM -> WHERE -> GROUP BY -> HAVING -> ...

  7. JAVA修饰符优先级先后顺序规范

    在实际的开发中,会遇到定义静态常量时,有的人使用的修饰符顺序不一致,例如 ... static final ... 或者 ... final static ... 于是找到了下规范,分享下 优先级 修 ...

  8. CodeForce-799C Fountains (记忆化DP)

    Fountains CodeForces - 799C 某土豪想要造两座喷泉.现在有 n 个造喷泉的方案,我们已知每个方案的价格以及美观度.有两种合法的货币:金币和钻石.这两种货币之间不能以任何方式转 ...

  9. java.lang.NullPointerException: Attempt to invoke virtual method 'int com.example.xxx.Json.NewsBean.getError_code()' on a null object reference错误解决

    AS在运行的过程中出现了错误: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.example.xx ...

  10. 使用manacher算法解决最长回文子串问题

    要解决的问题 求一个字符串最长回文子串是什么.且时间复杂度 O(N) 具体描述可参考: LeetCode_5_最长回文子串 LintCode_200_最长回文子串 暴力解法 以每个字符为中心向左右两边 ...