CI/CD:用 Jenkins 通過 Git Push 觸發自動製作 Flask 項目的 Docker 鏡像

Flask 項目文件

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

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 images -f 'dangling=true' -q | wc -l`
    if [ $a -ge 0 ];then docker rmi $(docker images -f "dangling=true" -q);fi
    
    -> 【保存】

注意

  • docker-compose.yml 裏要把 docker 命令和 docker.sock 映射進容器
  • 裝插件容易失敗,好像不怎麼用裝插件也可以
  • 無需配置 Publish over SSH
  • 構建觸發器的啓程表裏面是 cron 表達式
  • 如果在 docker build 前已經存在同名鏡像,那麼在完成後會出現一個無名(dangling)鏡像,最後清理一下。

參考:

  • https://medium.com/@angellom/automatically-building-a-flask-docker-image-on-git-push-with-jenkins-5a30c9fc9beb
發佈了65 篇原創文章 · 獲贊 20 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章