前言

最近在写一些小玩具的时候,一次次的测试,打包,部署流程太麻烦了,正好代码都放在github上,于是就是打算用travis-ci来进行持续集成 解放双手.

实现思路

  1. dockerfile + docker-compose来构建docker容器
  2. travis-ci + github 来hook repo的变动
  3. travis-ci 调用 dockerfile打包 docker image并push到dockerhub
  4. travis-ci ssh 登录到目标机器,copy docker-compose并执行来完成部署

具体实现

注册travis-ci并关联github项目

太简单了 从略

docker容器构建

由于项目是基于java+gradle来构建的,所以dockerfile需要进行多阶段构建

先build出fat-jar来:

#以gradle 为基础构建build环境
FROM gradle:5.2.1-jdk8-alpine AS build-env
#copy源码
ADD --chown=gradle . /app
WORKDIR /app
#运行gradle task进行build
RUN gradle assemble --info
复制代码

将jar包copy到jre环境

FROM openjdk:8-jre
# 时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo Asia/Shanghai > /etc/timezone \&& dpkg-reconfigure -f noninteractive tzdata
# port
EXPOSE 9000
#copy
COPY --from=build-env /app/build/libs/xxx.jar /app/bin/xxx.jar
#运行
CMD ["java", "-jar", "/app/bin/xxx.jar"]
复制代码

这里需要注意的是ADD的时候要授予权限,否则gradle命令执行不了

多阶段构建需要声明--from的上一个阶段,否则copy不到jar包

docker-compose编写

version: '2'
services:xxx-service:image: xxx:latestcontainer_name: xxxenvironment:- JAVA_TOOL_OPTIONS=-Xms128m -Xmx256mports:- "9000:8080"
复制代码

Travis CI

language: bash
services:- docker
sudo: required
branches:only:- master
script:- docker build . -t "xxx:latest"after_success:- docker login --username=username -p="password" dockerhub- docker push dockerhub:latest- chmod 600 id_rsa- scp -o "StrictHostKeyChecking no" -i id_rsa docker-compose.yml ubuntu@ip:/home/ubuntu/docker/- ssh -o "StrictHostKeyChecking no" -i id_rsa ubuntu@ip "cd /home/ubuntu/docker/;sudo docker-compose -f docker-compose.yml pull;sudo docker-compose -f docker-compose.yml up -d;exit"
复制代码

分解一下:

  • 声明language:bash
  • services选择docker环境
  • script 启动docker image build
  • after_success构建完成之后,登录dockerhub,pushimage,登录服务器并cp执行docker-compose.
  • ssh 后跟的"命令"会在登录成功后执行

敏感信息这里可以通过Travis CI的环境变量来设置,可以避免是公开仓库而泄露 ssh_key可以使用Travis CI的加密key来避免泄露

实现效果

完成这些之后,每次在push代码到deploy分支上的时候,就可以愉快的去玩耍了,Travis会自动的进行编译并部署,如果想要查看部署进度,我们可以打开commit点击后面的编译状态图标去查看具体的Travis进度。

转载于:https://juejin.im/post/5cd2468e6fb9a0323968a199

解放双手,基于github travis-ci docker自动化部署java项目相关推荐

  1. 纯java的方式实现自定义自动化部署java项目

    纯java的方式实现自定义自动化部署java项目 前言 使用第三方的服务或插件实现部署所存在的问题 自动化部署java项目 java项目部署方式 流程 代码实现 打包 使用 java 执行 cmd 进 ...

  2. Maven插件wagon-maven-plugin自动化部署Java项目到Linux远程服务器

    通常情况下,程序开发完成后部署到线上Linux服务器,可能需要经历打包.将包文件传到服务器.SSH连上服务器.敲命令启动程序等一系列繁琐的步骤.实际上这些步骤都可以通过Maven的一个插件wagon- ...

  3. 基于docker+gunicorn部署sanic项目

    基于docker+gunicorn部署sanic项目 源代码: https://github.com/ltoddy/Python-useful/tree/master/sanic-app 最近云服务提 ...

  4. 【云服务器】基于docker容器部署Halo项目的个人博客搭建并部署到云服务器

    目录 1 docker快速部署halo个人博客 2 主题设置(本文使用的是M酷Joe 2.0版本的主题,下载链接放在下面了) 2.1 API报错解决方案 2.2 首页分栏设置 2.3 轮播图的修改 2 ...

  5. Jenkins自动化部署Vue项目

    Jenkins自动化部署Vue项目 jenkins介绍 Jenkins是开源的,使用Java编写的持续集成的工具,在Centos上可以通过yum命令行直接安装.Jenkins只是一个平台,真正运作的都 ...

  6. docker 打包部署 python项目_Docker如何部署Python项目的实现详解

    Docker 是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建.打包为一个轻量级容器,并在任何地方运行.Docker 会在软件容器中自动部署应用程序. 在本篇中,我将介绍如 ...

  7. (三)jenkins+bonobo git server+windows系统自动化部署springboot项目(远程windows自动化部署)

    前提 jenkins安装,参考:(一)jenkins+bonobo git server+windows系统自动化部署springboot项目(jenkins安装) 自动化部署,参考:(二)jenki ...

  8. docker nginx部署前端项目

    最近一直在搞前后端分类,一直在想前端的html页面应该用什么部署 想来想去,如果用tomcat好像有点浪费资源,作为程序员自然要时时刻刻追求新的东西 一直以来都是在apache tomcat上面运行, ...

  9. docker compose java_Docker-compose部署java项目

    Docker-compose部署java项目 前置条件: 安装docker 安装docker-compose 防火墙啥的都设置好 dockerfile-demo FROM java:8 VOLUME ...

最新文章

  1. 常见的IaaS安全问题与缓解方法
  2. c语言运行时显示内存不足,请问:c或c++运行时 遇到虚拟内存不足时咋办,帮优化下代码...
  3. java it_关于 Java Iterator(迭代器)学习笔记
  4. 魔鬼作坊第一部实践----第九课
  5. uri uri_什么是URI? 了解许可证术语以确保合规
  6. 抖音打破了传统互联网的商业逻辑
  7. 什么是NSAssert?
  8. oop matlab,oop – 在Matlab中设置对象的属性
  9. 适用于物联网数据共享的区块链节点存储优化方案
  10. 相爱相杀:移动联通IT支撑回忆录(九)
  11. JAVA 之父高斯林:廉颇老矣,尚能饭否?
  12. 数据分析|基础概念/excel/tableau自学笔记
  13. mac java 更新_mac版java怎么更新升级 mac版java更新升级方法
  14. zookeeper windows7下集群搭建
  15. 最先进的智能采茶机器人_智能采茶机器人关键技术研究
  16. foxmail怎么群发邮件
  17. 30行Python代码,抓取全网实时热点,获取最新资讯
  18. 渗透测试之后台查找,如何查找网站后台
  19. 通俗理解面向对象和面向过程+编程思想
  20. 20220715_JaveWeb_MVC模式_三层架构案例

热门文章

  1. vue:axios二次封装,接口统一存放
  2. L1-075 强迫症 (10 分)-PAT 团体程序设计天梯赛 GPLT
  3. 蓝桥杯 ALGO-51 算法训练 Torry的困惑(基本型)[前n个质数的乘积]
  4. vim nerdtree 标签_学业支持 | OS课程——给你的vim换套新衣服
  5. 未定义标识符 stringc/c++(20)_拓展巩固练习(2020.5.20)
  6. CSS学习总结3:CSS定位
  7. 【EMC】电压暂降、短时中断和电压变化
  8. 新手必看:揭秘德州扑克概率表
  9. linux中用shell获取昨天、明天或多天前的日期
  10. 1月Web服务器份额之争:仅Microsoft份额下降