Docker
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管理后台,这样就可以防止信息泄露,截图如下
我们因为使用了宿主机的缓存,记得打开这个配置
下面构建的效果
用时31秒,从代码拉取到打包成镜像到最后推送到镜像仓库。
0条评论