Drone自动化构建Python镜像

Drone自动化构建Python镜像

       最近一直都在优化Drone自动化部署项目,刚好昨天晚上同事需要开发个功能,项目是用python语言进行开发,需要借用我的服务器进行部署,由于我的服务器是用docker部署项目,没有装python3,于是就想直接用Drone来构建镜像,同样用docker进行部署。

       一、创建运行文件

       代码运行文件,我们简单做个一个http请求,返回Hello World,创建文件run.py

import tornado.ioloop
import tornado.web


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello World")


def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])


if __name__ == "__main__":
    app = make_app()
    app.listen(8888, '0.0.0.0')
    tornado.ioloop.IOLoop.current().start()

       二、创建安装扩展文件

       项目根目录创建文件requirments.txt,详细如下

tornado==4.5.1

       三、创建构建镜像文件

       项目根目录下创建文件Dockerfile,详情如下

#设置基础镜像
FROM python:3.7-alpine as builder
#设置工作目录
WORKDIR /app/
#复制文件进工作目录
COPY . /app/
#加载扩展
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir -r requirments.txt
#执行文件
ENTRYPOINT python run.py
# 暴露端口
EXPOSE 8888

这里我们已python3镜像为基础镜像,app目录为工作目录,将代码复制到该目录下,同时加载扩展,运行run.py文件,暴露8888端口。

       四、创建Drone自动化部署文件

       项目根目录下创建文件.drone.yml,详情如下

kind: pipeline
type: docker
name: python-test

#设置挂载
volumes:
  #Go编译缓存
  - name: pkgdeps
    host:
      path: /home/drone/cache/python-test/cache
  #Docker环境
  - name: docker
    host:
      path: /var/run/docker.sock
  #Docker配置
  - name: docker-daemon
    host:
      path: /etc/docker/daemon.json
#构建步骤
steps:
#设置缓存
- name: clean
  image: docker:19.03.1
  network_mode: host
  # 将宿主机的 docker和配置挂载到运行的 docker 容器中,那么在容器中运行 docker 命令时,等同于在宿主机中运行该docker 命令
  volumes:
    - name: docker
      path: /var/run/docker.sock
    - name: images
      path: /images
    - name: docker-daemon
      path: /etc/docker/daemon.json
#构建镜像并推送至镜像仓库
- name: publish
  image: plugins/docker
  pull: if-not-exists
  volumes:
    - name: docker
      path: /var/run/docker.sock
    - name: pkgdeps
      path: /cache
  mirrors:       #镜像仓库加速地址,不需要加速,可以直接删除
    from_secret: registry_mirrors
  settings:
    purge: false
    registry:   #镜像仓库域名
      from_secret: registry
    repo:        #镜像仓库详细地址
      from_secret: repo
    tags:
      - latest
    username:    #镜像仓库账户
      from_secret: registry_user_name
    password:    #镜像仓库密码
      from_secret: registry_password
#通知发到telegram
- name: telegram
  image: hongzhuangxian/telegram-drone-plugin
  pull: if-not-exists
  settings:
    proxy_url: "填这里代理地址"
    token:
      from_secret: telegram_token
    chat_id:
      from_secret: telegram_chat_id

我们需要先到构建服务器创建缓存目录,路径如下

/home/drone/cache/python-test/cache

用于存放构建过程缓存。同时我们挂载宿主机Docker环境,这样不用每次构建都拉取镜像,直接使用宿主机镜像,这样可以提高构建速度。

       五、配置密钥

       自动化部署配置文件为了避免信息暴露,像仓库地址跟登陆信息以及通知信息,我们直接配置在Drone管理后台,这样就可以防止信息泄露,截图如下

1.png

我们因为使用了宿主机的缓存,记得打开这个配置

2.png

下面构建的效果

微信截图_20220624190559.png

用时31秒,从代码拉取到打包成镜像到最后推送到镜像仓库。

0条评论

发表评论