基於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

相關文章
相關標籤/搜索