博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解放双手,基于github travis-ci docker自动化部署java项目
阅读量:5789 次
发布时间:2019-06-18

本文共 2040 字,大约阅读时间需要 6 分钟。

前言

最近在写一些小玩具的时候,一次次的测试,打包,部署流程太麻烦了,正好代码都放在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 . /appWORKDIR /app#运行gradle task进行buildRUN 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# portEXPOSE 9000#copyCOPY --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:latest    container_name: xxx    environment:      - JAVA_TOOL_OPTIONS=-Xms128m -Xmx256m    ports:      - "9000:8080"复制代码

Travis CI

language: bashservices:  - dockersudo: requiredbranches:  only:    - masterscript:  - 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

你可能感兴趣的文章
Jquery中缩小图像的大小
查看>>
logrotate日志自动分割
查看>>
linux命令——cp
查看>>
视频直播常见问题与解决办法汇总【系列一】
查看>>
【问题】The coprocessor thread stopped itself due to scan timeout or scan threshold
查看>>
jQuery | 获取及设置内容和属性
查看>>
wget的替换工具axel多线程下载详解
查看>>
day04.2:linux克隆及服务器之间登录
查看>>
回归测试自动化不充分-Bug总结系列笔记
查看>>
zabbix 监控mysql状态
查看>>
HAWQ技术总结
查看>>
如何在Office 365租户之间迁移邮箱
查看>>
loadRunner_windows Sockers 关联
查看>>
Android开发之旅: Intents和Intent Filters(实例部分)
查看>>
WinEyes的重新实现--windows系统及其消息机制
查看>>
Mysql的共享锁和排他锁(转载)
查看>>
对于B-Tree B+Tree 红黑二叉树我的理解
查看>>
Java Queue 使用总结
查看>>
Calendar 对象的使用实例
查看>>
linux下如何查看内核版本和系统版本信息
查看>>