Travis CI自动部署项目


前期准备

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项目

请先学会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 并执行来完成部署

第一步:本地创建.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

https://docs.travis-ci.com/

相关博文:

https://www.cnblogs.com/biaogejiushibiao/p/11736699.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM