CICD 八(制作 flask 基础镜像,创建测试程序 hello)
创建 flask 基础镜像
在 192.168.0.200 上操作
mkdir /data/base_image -p && cd /data/base_image
# 编辑 Dockerfile
vi Dockerfile
FROM python:3.6
WORKDIR /uwsgi
RUN echo "Asia/Shanghai" > /etc/timezone
COPY Shanghai /etc/localtime
COPY requirements.txt ./
COPY uwsgi.ini ./
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
EXPOSE 8000
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
# 编辑 entrypoint.sh
vi entrypoint.sh
#!/bin/bash
uwsgi --ini /uwsgi/uwsgi.ini
# 编辑 requirements.txt
vi requirements.txt
click==7.1.2
Flask==1.1.2
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
Werkzeug==1.0.1
uwsgi==2.0.18
# 编辑 uwsgi.ini
vi uwsgi.ini
[uwsgi]
# 配合 nginx 使用
#socket = 127.0.0.1:8000
# 直接作为 web 服务器时使用
http=0.0.0.0:8000
#项目路径
chdir = /data
# 适用于 flask 项目部署
wsgi-file = app.py
# router
callable = app
#指定工作进程
processes = 4
#主进程
master = true
#每个工作进程有2个线程
threads = 2
#指的后台启动 日志输出的地方
#daemonize = uwsgi.log
#保存主进程的进程号
pidfile = uwsgi.pid
# 复制时区文件
cp /usr/share/zoneinfo/Asia/Shanghai .
# 打包上传镜像
docker build -t registry.cn-shenzhen.aliyuncs.com/klvchen/kl-flask:0.1.0 ./
docker push registry.cn-shenzhen.aliyuncs.com/klvchen/kl-flask:0.1.0
注意每个基础镜像的不同,上面的基础镜像有两点需要注意
- 所有程序放入到 /data 目录下
- 入口程序为 app.py; router 为 app; app.py 必须在 /data 目录下面
创建测试程序 hello
目录结构:

# app.py 文件
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World~ master 16:23'
if __name__ == '__main__':
app.run(host='0.0.0.0')
# Dockerfile 文件,jenkins 调用 docker build 时使用到
FROM registry.cn-shenzhen.aliyuncs.com/klvchen/kl-flask:0.1.0
WORKDIR /data
COPY . .
# Jenkinsfile 文件, 调用 jenkins 公共 library,指定 argocdAppName 和 kAutoDeploy
library 'cicd-library@master'
flaskCI {
argocdAppName = "hello"
kAutoDeploy = true
}
# package.json 文件, 在 jenkins 公共 library 中会使用到
{
"name": "hello",
"version": "0.1.0"
}
把 测试程序 hello 上传到阿里云云效上

代码地址:
https://codeup.aliyun.com/5fd97f761acb1ae7cc188588/pro_cicd/hello.git
配置 webhook
目的:hello 提交代码到指定的分支会触发 Jenkins 构建


“配置”,“Webhooks”
URL 填入:http://jk.tunnel.yanpin.cn/multibranch-webhook-trigger/invoke?token=abcde123456
URL 为 jenkins 的 http://{Jenkins_URL}/multibranch-webhook-trigger/invoke?token={TOKEN}; 注意,这里URL要被 阿里云代码仓库访问到,若是私网,可以使用 ngrok 映射出去
token 可参考:


浙公网安备 33010602011771号