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

  • 相关阅读:
    JavaScript函数中的this四种绑定形式
    jQuery的html()、text()和val()的使用和区别
    iframe-父子-兄弟页面相互传值(jq和js两种方法)
    Spring Boot 嵌入式 Tomcat 文件上传、url 映射虚拟路径
    SpringMVC上传图片
    <iframe>和<frame>标签属性详解
    Mybatis 事物回滚最简单的操作方式
    SpringBoot配置log4j
    springboot整合redis(集群)
    Maven setting.xml简易配置
  • 原文地址:https://www.cnblogs.com/btapple/p/13035589.html
Copyright © 2020-2023  润新知