持续集成与持续部署(五)03-TravisCI——Travis CI和Docker的持续集成之所使用的基础组件、dockerfile配置、docker部署脚本

所使用的基础组件

代码托管在Github上,使用github集成的Travis CI自动触发CI流程。在CI中自动build新的image上传到Docker Hub。然后通过sshpass远程登录server触发部署脚本。部署脚本pull新的image然后部署。

Dockerfile

由于项目都是基于python的,所以dockerfile比较简单:

FROM ubuntu:latest
MAINTAINER Shaobo Liu <shaobo@mkdef.com>
LABEL Description="This image is used to flask-kraken"
RUN apt-get update -y
RUN apt-get install -y python3-pip python3-dev build-essential
COPY src /app
COPY requirements.txt /app
WORKDIR /app
RUN pip3 install -r requirements.txt
ENTRYPOINT ["python3"]
CMD ["app.py"]

分解一下:

FROM ubuntu:latest
MAINTAINER Shaobo Liu <shaobo@mkdef.com>
LABEL Description="This image is used to flask-kraken"

首先申明使用的基础镜像,然后写上大名表示我是维护这个镜像的作者和这个镜像的用途。

RUN apt-get update -y
RUN apt-get install -y python3-pip python3-dev build-essential

安装python3,如果有其他的工具或者lib,也要写在这里。

COPY src /app
COPY requirements.txt /app
WORKDIR /app
RUN pip3 install -r requirements.txt

复制源代码到docker里,然后切换工作目录,安装三方依赖。 有时候这里需要安装一些系统级的依赖,比如lxml或者psycopg2之类的,就需要加到前面apt-get install里去。

ENTRYPOINT ["python3"]
CMD ["app.py"]

最后是需要执行的命令。根据docker的userguide,一个image最好只干一件事。

Travis CI

在项目根目录添加.travis.yml来定义CI流程

sudo: requiredlanguage: pythonservices:- dockerpython:- "3.5"before_install:- sudo apt-get update- sudo apt-get install sshpassinstall: "pip install -r requirements.txt"script: - python --versionafter_success:- docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"- docker build -t shaobol/kraken:$TRAVIS_BRANCH-$TRAVIS_BUILD_ID . - docker push shaobol/kraken:$TRAVIS_BRANCH-$TRAVIS_BUILD_ID;- sshpass -p $VPS_PASSWORD ssh -o stricthostkeychecking=no root@45.32.137.234 "sudo /home/saukymo/kraken/deploy.sh $TRAVIS_BRANCH-$TRAVIS_BUILD_ID"

这里就不一一分解了,具体可以参考Travis的官方文档。

主要介绍一下这个部分和其他部分是怎么联动的。首先Travis和Github是有集成服务的,在Setting -> integrations & services里选择添加Travis就可以了。然后在Travis上就可以设置相应的CI流程了,默认是master有新的commit就会自动触发一次CI。

每次CI结束后的结果可以通过badge查看。

重点在于测试完成后build和push docker image的过程

after_success:- docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"- docker build -t shaobol/kraken:$TRAVIS_BRANCH-$TRAVIS_BUILD_ID . - docker push shaobol/kraken:$TRAVIS_BRANCH-$TRAVIS_BUILD_ID;

敏感信息这里全部通过Travis的Environment Variables。这样可以避免因为公开而泄露。

如果需要将一些敏感信息传递到image里面去,可以通过--build-arg参数传递进去,然后保存为环境变量,参考reference

最后通过sshpass执行部署脚本,这一步也可以使用ansible代替。

docker 部署脚本

#!/bin/bashdocker pull shaobol/odes:$1if docker ps -a | grep -q odes; thendocker rm -f odes
fidocker run -d --name odes -p 9000:9000 --link postgres:postgres shaobol/odes:$1

脚本很简单,接收CI传过来的参数(image tag),pull新的image,然后干掉之前的container,run一个新的。这样就完成了update整个过程。

持续集成与持续部署(五)03-TravisCI——Travis CI和Docker的持续集成之所使用的基础组件、dockerfile配置、docker部署脚本相关推荐

  1. travis-ci自动部署_如何使用Travis CI设置高级自动部署

    travis-ci自动部署 by Amir Off 由Amir Off 如何使用Travis CI设置高级自动部署 (How to set up advanced automatic deployme ...

  2. travis-ci自动部署_如何使用Travis CI部署(几乎)零恐惧的Cloud Foundry应用

    travis-ci自动部署 by Robin Bobbitt 罗宾·波比(Robin Bobbitt) 如何使用Travis CI部署(几乎)零恐惧的Cloud Foundry应用 (How to d ...

  3. Jenkins与Docker的持续集成实践

    本文讲的是Jenkins与Docker的持续集成实践[编者的话]持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁.更早的集成 ...

  4. Jenkins 与 Docker 的持续集成实践一

    2019独角兽企业重金招聘Python工程师标准>>> 持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁. ...

  5. 持续集成服务 Travis CI 教程

    编写代码只是软件开发的一小部分,更多的时间往往花在构建(build)和测试(test). 为了提高软件开发的效率,构建和测试的自动化工具层出不穷.Travis CI 就是这类工具之中,市场份额最大的一 ...

  6. Vite(三)部署静态站点(wordpress与hugo与Vercel、CI/CD、Travis CI、GitLab CI)、环境变量与模式、服务端渲染(SSR)

    Vite(三)部署静态站点(wordpress与hugo与Vercel.CI/CD.Travis CI.GitLab CI).环境变量与模式.服务端渲染(SSR) 文章目录 Vite(三)部署静态站点 ...

  7. 【请收藏】自动化构建部署之Travis CI使用(GitHub/Travis CI/Vue)

    文章目录 CI/CD 工具 Travis CI 使用 1. 注册 2. 新建Github仓库 3. 创建vue项目 4. 配置Travis CI 5. 发布到GitHub pages Travis C ...

  8. 持续集成与持续部署(五)01-TravisCI——使用简介-Travis CI 只支持 Github,提供的是持续集成服务 配置项目的.travis.yml文件

    持续集成与持续部署(五)01-TravisCI--使用简介-Travis CI 只支持 Github,提供的是持续集成服务 & 配置项目的.travis.yml文件 TravisCI 使用简介 ...

  9. Kubernetes部署(四):k8s项目交付----(1)持续集成

    实战交付dubbo服务到k8s 一.什么是Dubbo是什么 ● Dubbo是什么● Dubbo基于java开发的,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,00 ...

最新文章

  1. #大学#SQL基础学习笔记(02)
  2. 两虎相争将带来优质的互联网搜索服务 --- 我看Google归来!
  3. python爬快手个人介绍个性_快手个性个人介绍句子签名 快手自己介绍模板句子...
  4. 用nagios监控ORACLE服务器
  5. Elasticsearch--springcloud整合 high-level-client---全文检索引擎ElasticSearch工作笔记023
  6. 01.vue的简单实例
  7. 使用Visual Studio SDK制作GLSL词法着色插件
  8. 基于大数据的图书推荐系统
  9. AndroidStudio:设计一个能在图片上涂鸦的程序
  10. 强网杯2019线上赛-misc
  11. alert日志大量DISTRIB TRAN GDDB.6d36e46c.419.26.15318211问题
  12. 高盛发布区块链报告:从理论到实践(中文版)七
  13. 国际化中英文切换,英文内容长度过长的解决问题
  14. 计算机二级考试干货内容,计算机二级考试经验总结,干货满满!
  15. [ARM]GIC相关知识
  16. 狂送京东购物卡(无门槛¥1200)
  17. 2021年基金从业资格考试时间及报名时间
  18. 圣斗士星矢ol服务器端文件夹,圣斗士星矢ol完整安装指南
  19. win10系统和安全管理工具服务器,手把手教你分析Win10远程服务器管理工具(RSAT)已发布...
  20. 结合给定数据使用JointJS自动绘制元素

热门文章

  1. 日历---C++封装一个Date类,Calendar类,实现简单的日历+日期计算器程序
  2. 关于内外网数据同步解决方案
  3. 一文详解 m3u8视频格式与视频秒开优化
  4. XMind 8 安装与激活
  5. 又一大型色情直播App被捣毁,女主播哭求别告诉家人
  6. 计算机和电脑键盘进水怎么办,笔记本键盘进水失灵了怎么办?别着急,只需记住这几招!...
  7. 蒙特卡洛方法 (Monte Carlo Method)(5)
  8. 4 Pics 1 Word,穷举答题
  9. ICMP目的网络,主机,协议,端口不可达报文的Type值,Code值分别是
  10. java GUI mysql实现的薪资工资管理系统项目源码附带视频指导教程