基於Github Travis-ci Docker自動化部署
阿新 • • 發佈:2019-12-31
實現思路
-
Dockerfile
+docker-compose
來構建docker容器 -
travis-ci
+github
來hookrepo
的變動 -
travis-ci
呼叫Dockerfile
打包docker image
並push到dockerhub
-
travis-ci
ssh 登入到目標機器,copydocker-compose
並執行來完成部署
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.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"
複製程式碼
分解一下:
- 宣告language:bash
- services選擇docker環境
- script 啟動docker image build
- after_success構建完成之後,登入dockerhub,push image,登入伺服器並cp執行docker-compose.
- ssh 後跟的"命令"會在登入成功後執行
敏感資訊這裡可以通過Travis CI
的環境變數來設定,可以避免是公開倉庫而洩露 ssh_key可以使用Travis CI
的加密key來避免洩露