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. WebDriverAgent重签名爬坑记

    接上一篇博文,已经配置好了Xcode环境,那接下来要完成的就是重签名WebDriverAgent.在讲重签名之前,我们还是先来了解下WebDriverAgent,熟悉的朋友,可以直接跳过. WebDr ...

  2. MacOS安装和卸载Java

    ​ 安装java 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 设 ...

  3. Java链表练习题小结

    链表 链表(Linked List)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).一个链表节点至少包含一个 数据域和 ...

  4. this关键字的理解

    this理解为:当前对象 或 当前正在创建的对象 this代表所在类的当前对象的引用(地址值),即对象对自己的引用. 备注:意思方法被那个对象调用,方法中的this就代表那个对象.即谁调用,this就 ...

  5. golang中的左值VS右值

    对应关系 左值 可寻址 右值 不可寻址 可寻址:可以通过&取地址符,获取内存地址; 可寻址,也就是分配了内存; 不可寻址:根本没有分配内存; 常量const 常量通常只支持数字/字符串/布尔, ...

  6. Elasticsearch-head插件的安装与配置

    第一种: 通过浏览器添加插件 通过chrome安装插件的方式提供一个可操作es的图形化界面. 在chrome 浏览器中,通过"扩展程序" 添加 elasticsearch head ...

  7. Vue+elementUI 创建“回到顶部”组件

    1.创建"回到顶部"组件 1 <template> 2 <transition name="el-fade-in"> 3 <div ...

  8. elementUI 表格 table 的表头错乱问题

    页面中多组件开发时,如果页面中有表格的,table表格头出现表头错乱 // 全局设置1 body .el-table th.gutter{ 2 display: table-cell!importan ...

  9. PHP中的MySQLi扩展学习(三)mysqli的基本操作

    我们继续 MySQLi 扩展的学习,上篇文章中提到过,MySQLi 的扩展相对于 PDO 来说功能更加的丰富,所以我们依然还会在学习过程中穿插各种 MySQLi 中好玩的方法函数.不过,今天的主角是 ...

  10. PHP中的垃圾回收相关函数

    之前我们已经学习过 PHP 中的引用计数以及垃圾回收机制的概念.这些内容非常偏理论,也是非常常见的面试内容.而今天介绍的则是具体的关于垃圾回收的一些功能函数.关于之前的两篇介绍文章,大家可以到文章底部 ...