本文介绍如何使用github action 快速制作flask应用cicd流程。git地址在cicd-flask-example

flask是实现python WSGI标准的web框架,但是仅仅适用于开发环境。要部署到生产环境,需要选择一种WSGI服务器(本文选择的是gunicorn)。

什么是WSGI Server?

WSGI 是python语言定制的web规范(仅限python),兼容WSGI(Web Server Gateway Interface)的服务器就叫"WSGI Server".

其功能包括:

  1. 运行python应用
  2. 协议转换:将HTTP请求转换为标准WSGi请求,将WSGI响应转换为HTTP响应

应用

参考:flask quickstart 运行一个简单的Hello World 服务器。

容器化

Hello world程序

  • Dockerfile
# 选择python版本
FROM python:3.7.14-buster
# 设置工作目录
WORKDIR /app
# 安装python依赖
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
# 拷贝当前文件夹所有文件到容器工作目录
COPY . .
# 启动应用
CMD [ "gunicorn" , "app:app", "-c", "gunicorn.conf.py"]

打成docker应用,我们希望以:

docker run -d -p 8080:8080 oneslide/devops:flask

方式启动。

github action

github action 是github免费的流水线工具。流水线配置文件时yaml格式的,放置在项目根目录的.github/workflows下。

这个仓库的流水线配置文件时.github/workflows/docker-image.yml流水线流程大概分成三步:

  1. 打镜像
  2. 登录DockerHub
  3. 推送镜像到DockerHub。
  • docker-image.yml
name: Docker Image CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]
env:
  IMAGE_NAME: oneslide/devops:flask
jobs:

  build:

    runs-on: ubuntu-latest

    steps:
     # 1. 打镜像
    - uses: actions/checkout@v3
    - name: Build the Docker image
      run: docker build . --file Dockerfile --tag ${{env.IMAGE_NAME}}
     # 2. 登录DockerHub
    - name: Login to Docker Hub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}  
        password: ${{ secrets.DOCKERHUB_TOKEN }}
     # 3. 推送镜像到DockerHub    
    - name: Publish Image to Docker Hub
      run: docker push ${{env.IMAGE_NAME}}

添加Docker Hub凭证

注意到流水线配置文件docker-image.yml${{ secrets.DOCKERHUB_USERNAME }} 的变量 。

    - name: Login to Docker Hub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}   # 用户名
        password: ${{ secrets.DOCKERHUB_TOKEN }}  # 密码

${{ secrets.DOCKERHUB_USERNAME }} 变量需要在仓库Settings -> Secret - >Action -> New Repository Secert配置。

输入你的Docker Hub的凭证。
在这里插入图片描述

Logo

一站式 AI 云服务平台

更多推荐