Github Actions 实践
Github Actions 实践
Github Actions 是 Github 的持续集成服务,通过在 repo 发生特定的行为时执行指定的命令实现自动测试、自动部署等功能。
基本术语
- workflow:一次持续集成运行的过程
- job:一个workflow由一个或多个job构成
- step:一个job由一个或多个step构成,分步完成一个任务
- 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 实践的更多相关文章
- Github Packages和Github Actions实践之CI/CD
		概述 Github在被微软收购后,不忘初心,且更大力度的造福开发者们,推出了免费私有仓库等大更新.近期又开放了packages和actions两个大招,经笔者试用后感觉这两个功能配合起来简直无敌. G ... 
- 基于Github Actions + Docker + Git 的devops方案实践教程
		目录 为什么需要Devops 如何实践Devops 版本控制工具(Git) 学习使用 配置环境 源代码仓库 一台配置好环境的云服务器 SSH远程登录 在服务器上安装docker docker技术准备工 ... 
- Github原生CI/CD,初尝Github Actions
		Github 原生 CI/CD,初尝 Github Actions Intro Github 目前已经推出了自己的 CICD 服务 -- Github Actions,而且比微软的 Azure Dev ... 
- 使用.NET 6开发TodoList应用(31)——实现基于Github Actions和ACI的CI/CD
		系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求和目标 在这个系列的最后一节中,我们将使用GitHub Actions将TodoList应用部署到Azure Container ... 
- 使用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 ... 
- 用GitHub Actions自动部署Hexo
		什么是 GitHub Actions ? GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,GitHub 于 2018 年 10 月推出,正式版于 2019 年 11 月正式 ... 
- GitHub的实践
		GitHub的实践 2017-05-08,晴,来小米已经一周的时间了,感谢领导能给我一周的时间来熟悉 ubuntu.spring boot.maven.docker.github .大家会问,这些不都 ... 
- React + Node 单页应用「二」OAuth 2.0 授权认证 & GitHub 授权实践
		关于项目 项目地址 预览地址 记录最近做的一个 demo,前端使用 React,用 React Router 实现前端路由,Koa 2 搭建 API Server, 最后通过 Nginx 做请求转发. ... 
- GitHub Actions  完成CI CD
		在之前我的部署.版本控制.CI.CD都是在Jenkins 下来完成的 在前几天看到github上的一个新玩具actions,简直惊为天人 它能在你的仓库触发事件(Push,Pull,issue,... ... 
随机推荐
- Spring Cloud Zuul 学习+实践
			首先有必要了解一下什么是Zuul,它和Spring Cloud有什么关系. Zuul在Spring Cloud中承担着网关的职责,可以理解为客户端和服务端交互中的唯一通道.所有的客户端请求都会首先发送 ... 
- Pytest系列(15)- 多重校验插件之pytest-assume的详细使用
			如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest中可以用pyth ... 
- 7-31 堆栈操作合法性 (20 分)  PTA
			7-31 堆栈操作合法性 (20 分) 假设以S和X分别表示入栈和出栈操作.如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该 ... 
- JUnit5 快速入门指南
			1. 安装 在pom中添加依赖 <properties> <junit.jupiter.version>5.3.2</junit.jupiter.version> ... 
- 网络协议之TCP和UDP
			TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是Internet最基本.最广泛的协议.它定义了计 ... 
- 什么是内存屏障? Why Memory Barriers ?
			要了解如何使用memory barrier,最好的方法是明白它为什么存在.CPU硬件设计为了提高指令的执行速度,增设了两个缓冲区(store buffer, invalidate que ... 
- JavaScript循环 — for、for/in、while、do/while
			for 多次遍历代码块 const array = []for (var i = 0; i < 5; i++) { array.push(i)}console.log(array) // [0, ... 
- 使用ImageMagick操作gif图
			上篇文章我们已经学习了 GraphicsMagick 中的许多函数,也说过 GraphicsMagick 是 ImageMagick 的一个分支,所以他们很多的函数都是一样的使用方式和效果,相似的内容 ... 
- 【PHP数据结构】链表的其它形式
			在上篇文章中,我们已经说过了链表除了简单的那一种单向链表外,还有其它的几种形式.当然,这也是链表这种结构的一大特点,非常地灵活和方便.我们简单的想一想,如果让最后一个节点的 next 指回第一个节点, ... 
- 手机访问pc网站自动跳转手机端网站PHP代码
			$agent = $_SERVER['HTTP_USER_AGENT']; if(strpos($agent,"comFront") strpos($agent,"iPh ... 
