Github Actions 实践

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 的每次运行记录,可以及时追溯过去的问题。

posted @ 2020-06-03 09:50  btapple  阅读(514)  评论(0编辑  收藏  举报