基于Github Travis-ci Docker自动化部署

实现思路

  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并执行来完成部署

docker容器构建

因为项目是基于java+gradle来构建的,因此dockerfile须要进行多阶段构建java

先build出fat-jar来:git

#以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环境:github

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

docker-compose.yaml

version: '2'
services:
 xxx-service:
 image: xxx:latest
 container_name: xxx
 environment:
 - JAVA_TOOL_OPTIONS=-Xms128m -Xmx256m
 ports:
 - "9000:8080"

复制代码

.travis.yaml

language: bash
services:
 - docker
sudo: required
branches:
 only:
 - master
script:
 - docker build . -t "xxx:latest"
 - docker-compose -f docker-compose.yaml down
 - docker-compose -f docker-compose.yaml up -d --force-recreate 
 - docker-compose -f docker-compose.yaml down

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"


复制代码

分解一下:ubuntu

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

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

相关文章
相关标签/搜索