• docker + jenkins + flask 部署,持续化集成


    ###

    Flask 项目文件

    $ tree flask_docker_jenkins_demo/
    flask_docker_jenkins_demo/
    ├── Dockerfile
    ├── README.md
    └── app.py

    from flask import Flask, jsonify
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def hello_world():
        return 'Hello, World!'
    
    
    @app.route('/health')
    def health_checking():
        ret = {'status': 'UP'}
        return jsonify(ret)

    Dockerfile

    FROM python:3.6.9-alpine
    
    RUN pip install --no-cache-dir -i http://mirrors.aliyun.com/pypi/simple/ \
    --trusted-host mirrors.aliyun.com Flask gunicorn
    
    ADD . /app
    
    ENV GUNICORN_CMD_ARGS="--bind=0.0.0.0:5001 --chdir=./app/ --workers=4"
    
    CMD ["gunicorn", "app:app"]


    使用 docker 启动 jenkins :


    docker-compose.yml:

    version: '3'
    services:
      jenkins:
        image: 'jenkins/jenkins'
        container_name: jenkins
        restart: always
        ports:
          - '8080:8080'
          - '50000:50000'
        user: root
        volumes:
          - /root/jenkins/jenkins_home:/var/jenkins_home
          - /usr/bin/docker:/usr/bin/docker
          - /var/run/docker.sock:/var/run/docker.sock


    启动过程中会显示初始密码,也会保存在 /var/jenkins_home/secrets/initialAdminPassword 中,启动完成用浏览器访问 8080 端口,用初始化密码解锁 jenkins。

    建立构建任务
    Jenkins -> 新建任务 -> 起名字,构建一个自由风格的软件项目 -> 保存
    【源码管理】 -> 【Git】 -> 填写 Github 地址
    【构建触发器】 -> 【轮询 SCM】 -> 日程表填写* * * * *
    【构建】 -> 【增加构建步骤】 -> 【执行 shell】

    docker build -t my-flask-image:latest .
    a=`docker ps -a |grep my-flask-image | wc -l`
    if [ $a -gt 0 ];then docker rm -f $(docker ps -q --filter ancestor=my-flask-image);fi
    docker run -d -i --rm -p 5001:5001 my-flask-image


    -> 【保存】

    注意

    docker-compose.yml 里要把 docker 命令和 docker.sock 映射进容器
    装插件容易失败,好像不怎么用装插件也可以
    无需配置 Publish over SSH
    构建触发器的启程表里面是 cron 表达式
    如果在 docker build 前已经存在同名镜像,那么在完成后会出现一个无名(dangling)镜像,最后清理一下。

    ####

  • 相关阅读:
    iOS 上线流程
    静态库和动态库的区别
    iOS如何生成.a文件
    苹果公司软件
    iOS 的主要框架
    多线程图解
    判断屏幕横屏/竖屏
    最大堆构建和堆排序
    hadoop2.6.0 + hbase-1.0.0 伪分布配置
    centos6 名字服务dnsmasq配置
  • 原文地址:https://www.cnblogs.com/andy0816/p/15550586.html
Copyright © 2020-2023  润新知