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