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

栏目: 编程工具 · 发布时间: 5年前

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

最近在写一些小玩具的时候,一次次的测试,打包,部署流程太麻烦了,正好代码都放在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:latest
    container_name: xxx
    environment:
      - JAVA_TOOL_OPTIONS=-Xms128m -Xmx256m
    ports:
      - "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进度。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

群体性孤独

群体性孤独

[美] 雪莉·特克尔 / 周逵、刘菁荆 / 浙江人民出版社 / 2014-3-1 / CNY 66.90

[内容简介] ☆ 你是否也熟悉这样的场景:家人在一起,不是交心,而是各自看电脑和手机;朋友聚会,不是叙旧,而是拼命刷新微博、微信;课堂上,老师在讲,学生在网上聊天;会议中,别人在报告,听众在收发信息。所有这些现象都可以归结为“群体性孤独”——我们似乎在一起,但实际上活在自己的“气泡”中。我们期待他人少,期待技术多。不间断的联系,是否让人类陷入了更深的孤独? ☆ 麻省理工学院社会学教授雪......一起来看看 《群体性孤独》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具