前期准备
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
相关博文: