Dockerfile
+ docker-compose
來構建docker容器travis-ci
+ github
來hook repo
的變更travis-ci
調用 Dockerfile
打包 docker image
並push到dockerhub
travis-ci
ssh 登陸到目標機器,copy docker-compose
並執行來完成部署因爲項目是基於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
version: '2' services: xxx-service: image: xxx:latest container_name: xxx environment: - JAVA_TOOL_OPTIONS=-Xms128m -Xmx256m ports: - "9000:8080" 複製代碼
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
敏感信息這裏能夠經過Travis CI
的環境變量來設置,能夠避免是公開倉庫而泄露 ssh_key能夠使用Travis CI
的加密key來避免泄露bash