前期准備
1、Ubuntu本地安裝travis ci客戶端,鏈接
2、服務器安裝docker,鏈接
3、服務器安裝docker-compose,鏈接
4、服務器安裝rsync,鏈接
5、ssh免密登錄,鏈接
讓 travis 遠程登錄自己的服務器,所以后面配置項目時 需要將本地保存的 SSH 私鑰進行加密處理
7、Travis cl配置,鏈接
8、github配置,鏈接
operation1:使用travis,部署maven項目
第一步:為項目編寫【.travis.yml】文件
# 先登錄 travis login --org # 切換到項目跟目錄下,創建travis文件 travis init
修改travis文件
language: java install: mvn install
第二步:對SSH私鑰加密
# 登入 travis login --org # 在項目根目錄下,對私鑰加密 travis encrypt-file ~/.ssh/id_rsa --add --org
之后會在.travis.yml文件中生產如下內容(如果出現~\/.ssh/id_rsa就將反斜杠去掉):
before_install: - openssl aes-256-cbc -K $encrypted_a7dfe7f624ec_key -iv $encrypted_a7dfe7f624ec_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d
為了保證權限正常,我們多加一行設置:
before_install: - openssl aes-256-cbc -K $encrypted_a7dfe7f624ec_key -iv $encrypted_a7dfe7f624ec_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d - chmod 600 ~/.ssh/id_rsa
第三步:travis ci官網配置項目信息
配置一個變量==>用於部署項目的服務器ip地址,點擊 More options ,然后點擊 settings
第四步:修改項目打包方式為war,並設置war包的名稱
在項目pom文件中添加
<packaging>war</packaging>
在<build></build>下添加
<finalName>test-travis-ci-springboot</finalName>
最終:完整的travis文件
language: java install: mvn install addons: ssh_known_hosts: - $IP before_install: - openssl aes-256-cbc -K $encrypted_a7dfe7f624ec_key -iv $encrypted_a7dfe7f624ec_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d - chmod 600 ~/.ssh/id_rsa - echo -e "Host $IP\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config # 執行部署腳本,將編譯后的項目同步到服務器的webapps下 after_success: - chmod 600 ~/.ssh/id_rsa - rsync -az --delete ./target/test-travis-ci-springboot.war root@$IP:/usr/local/project_backup/test-travis-ci-springboot.war - ssh -o "StrictHostKeyChecking no" -i id_rsa root@$IP "cd /usr/local/tomcat/webapps;rm -rf test-travis-ci-springboot.war;rm -rf test-travis-ci-springboot/;cp /usr/local/project_backup/test-travis-ci-springboot.war ./;exit"
之后將兩個文件都提交到github
operation2:構建和部署Vue項目
大致過程一樣,只需要修改travis文件
language: node_js node_js: - 10.16.0 branches: only: - master install: - npm install script: - npm run build addons: ssh_known_hosts: - $IP before_install: - openssl aes-256-cbc -K $encrypted_bd16792238cd_key -iv $encrypted_bd16792238cd_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d - chmod 600 ~/.ssh/id_rsa - echo -e "Host $IP\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config after_success: - chmod 600 ~/.ssh/id_rsa - rsync -az --delete ./dist/* root@$IP:/usr/share/nginx/html/項目名稱
進階:Travis CI + Docker自動部署maven項目
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.yml文件
1. 先登錄 travis login --org 2、切換到項目跟目錄下,創建travis文件 travis init 3、對私鑰進行加密 travis encrypt-file ~/.ssh/id_rsa --add
第二步:Dockerfile (結合自己項目修改)
docker將會下拉一個最新的tomcat鏡像,然后將項目部署到docker的tomcat鏡像下,並不是服務器自己安裝的tomcat
#基礎鏡像 FROM tomcat #Message MAINTAINER soldier<soldier_wyyx@163.com.com> #構建日期 ENV REFRESHED_AT 2020-04-14 #切換鏡像目錄,進入/usr目錄 WORKDIR /usr/local/tomcat/webapps #復制編譯后的文件 COPY target/atm.war /usr/local/tomcat/webapps/atm.war #公開端口 EXPOSE 8080 #設置啟動命令 ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
第三步:docker-compose.yml(結合自己項目修改)
version: '2' services: atm: build: . image: soldierdocker/atm ports: - "8001:8080" container_name: atm
紅色字體部分必須修改
1、atm:新建項目時,項目名稱最好不要有大寫字母
2、soldierdocker:你dockerHub的用戶名,與后面的DOCKER_NAME一樣
3、8080:docker容器內部運行端口
4、8001:項目映射端口,給外部訪問,記得去配置服務器安全組,把這個端口開放出來
那么我這樣子配置,要訪問項目的話是==>http://你服務器ip:8001/atm/
第四步:.travis.yml(結合自己項目修改)
#環境語言 language: java #所選服務 services: - docker #權限 sudo: required #分支 branches: only: - master #執行腳本 script: - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V - docker build . -t "soldierdocker/atm:latest" #安裝之前執行腳本 before_install: - openssl aes-256-cbc -K $encrypted_71a1e6d76d99_key -iv $encrypted_71a1e6d76d99_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d - chmod 600 ~/.ssh/id_rsa - echo -e "Host $IP\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config #成功之后執行的腳本 after_success: - docker login -u=$DOCKER_NAME -p="$DOCKER_PWD" - docker push soldierdocker/atm:latest - chmod 600 id_rsa - rsync -az --delete ./docker-compose.yml root@$IP:/usr/local/project_backup/atm/ - ssh -o "StrictHostKeyChecking no" -i id_rsa root@$IP "cd /usr/local/project_backup/atm/;docker-compose -f docker-compose.yml pull;docker-compose -f docker-compose.yml up -d;exit"
/usr/local/project_backup:是我在服務器上用於存放項目信息的文件夾
$DOCKER_NAME = soldierdocker
第五步:配置好變量:點擊 More options,然后點擊settings
優化:使用阿里雲容器鏡像服務配合Travis CI+Docker自動部署Maven項目
1、為什么使用阿里雲容器鏡像服務?
因為使用DockerHub管理鏡像時,因為是外國服務器,使用部署項目時網速非常慢,大大增加了部署使用的時間;而阿里雲容器鏡像服務是國內服務器,服務器下拉鏡像速度非常快!
2、如何將DockerHub修改為阿里雲容器鏡像服務?
以前寫過的博客,可參考:鏈接
2.1 Dockerfile不用變
docker將會下拉一個最新的tomcat鏡像,然后將項目部署到docker的tomcat鏡像下,並不是服務器自己安裝的tomcat
#基礎鏡像 FROM tomcat #Message(維修人員) MAINTAINER soldier<soldier_wyyx@163.com.com> #構建日期 ENV REFRESHED_AT 2020-04-14 #切換鏡像目錄,進入/usr目錄 WORKDIR /usr/local/tomcat/webapps #復制編譯后的文件 COPY target/atm.war /usr/local/tomcat/webapps/atm.war #公開端口(tomcat所在端口) EXPOSE 8080 #設置啟動命令 ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
2.2 修改后的docker-compose.yml
version: '2'
services:
atm:
build: .
image: registry.cn-hangzhou.aliyuncs.com/soldier-hub/atm
ports:
- "8001:8080"
container_name: atm
3、修改后的travis.yml
#環境語言
language: java
#所選服務
services:
- docker
#權限
sudo: required
#分支
branches:
only:
- master
#執行腳本
script:
- mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
- docker build . -t "registry.cn-hangzhou.aliyuncs.com/soldier-hub/atm:latest"
#安裝之前執行腳本
before_install:
- openssl aes-256-cbc -K $encrypted_a7dfe7f624ec_key -iv $encrypted_a7dfe7f624ec_iv
-in id_rsa.enc -out ~/.ssh/id_rsa -d
- chmod 600 ~/.ssh/id_rsa
- echo -e "Host $IP\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
#成功之后執行的腳本
after_success:
- docker login -u=soldier_ali registry.cn-hangzhou.aliyuncs.com
-p="$DOCKER_PWD"
- docker push registry.cn-hangzhou.aliyuncs.com/soldier-hub/atm:latest
- chmod 600 ~/.ssh/id_rsa
- rsync -az --delete ./docker-compose.yml root@$IP:/usr/local/project_backup/atm/
- ssh -o "StrictHostKeyChecking no" -i id_rsa root@$IP "cd /usr/local/project_backup/atm/;docker-compose -f docker-compose.yml pull;docker-compose -f docker-compose.yml up -d;exit"
4、到Travis CI去修改當前項目下配置的變量
即:修改DOCKER_PWD,刪除DOCKER_NAME
訪問:http://116.62.48.112:8001/atm/
優化:使用阿里雲容器鏡像服務配合Travis CI+Docker自動部署Vue項目
大致與maven項目相同
只需按需修改Dockerfile
docker將會下拉一個最新的nginx鏡像,然后將項目部署到docker的nginx鏡像下,並不是服務器自己安裝的nginx
#基礎鏡像 FROM docker.io/nginx #Message(維修人員) MAINTAINER soldier<soldier_wyyx@163.com.com> #構建日期 ENV REFRESHED_AT 2020-04-14 #修改nginx文件 RUN rm /etc/nginx/conf.d/default.conf ADD default.conf /etc/nginx/conf.d/ COPY dist/ /usr/share/nginx/html/
commit code后travis的報錯
第一個錯誤:Target option 1.5 is no longer supported. Use 1.6 or later.
解決辦法,在pom.xml中添加(因為我的是jdk1.8)
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <build> <finalName>ATM</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>8</source> <target>8</target> </configuration> </plugin> </plugins> <resources> <!-- 編譯之后包含xml --> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <!-- 編譯之后包含xml和properties --> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
第二個錯誤:flag: invalid reference format: repository name must be lowercase
解決辦法:
docker repository必須為小寫,把travis文件下的docker腳本后的存儲庫名稱改為小寫,如圖中的atm
記住,下次建項目,項目名稱一定不要大寫!
成功
第三個錯誤:Fatal error compiling: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags -> [Help 1]
原因:是lombok版本太低,不支持java10以上。
解決辦法:
到https://mvnrepository.com查詢新版本即可
<!--Lombok目前最新--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency>
參考博客
官方文檔:
https://github.com/travis-ci/docs-travis-ci-com
相關博文: