玩轉spring boot——結合阿里雲持續交付

前言html

  在互聯網項目中,項目測試、部署每每須要花費大量時間。傳統方式是在本地打包、測試完畢程序,而後經過ftp上傳至服務器,再把測試的配置文件修改成生產環境的配置文件,最後從新運行服務。這一過程若是交給人工完成每每容易出錯,如項目有大量的配置,而僅有一處配置不正確將會發生重大的災難,所以項目的持續集成和持續交付則尤其重要。以前,筆者的項目是經過git+maven+tomcat+jenkins來完成的,而現在阿里雲推出了持續交付平臺,筆者來爲你們踩坑。java

 

1、準備工做(spring boot+maven的項目)linux


 

package com.github.carter659.springskill01;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * 入口類 博客出處:http://www.cnblogs.com/GoodHelper/
 *
 */
@SpringBootApplication
@Controller
public class App {

    @Value("${name}")
    private String name;

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @GetMapping("/")
    public String index(Model model) {
        model.addAttribute("name", name);
        return "index";
    }
}
App.java

 

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>玩轉spring boot——結合阿里雲持續交付</title>
</head>
<body>
    <h1>玩轉spring boot——結合阿里雲持續交付</h1>
    <h4>
        <a href="http://www.cnblogs.com/GoodHelper/">from 劉冬的博客</a>
    </h4>
    <h3 th:text="'環境爲:' + ${name}"></h3>
    <br />
    <a href="http://www.cnblogs.com/GoodHelper/">點擊訪問原版博客(www.cnblogs.com/GoodHelper)</a>
</body>
</html>
index.html
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.github.carter659</groupId>
    <artifactId>springskill01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
    </parent>

    <name>springskill01</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <finalName>spring-skill-01</finalName>
    </build>
</project>
pom.xml

build節點配置生成的jar名「<finalName>spring-skill-01</finalName>」,以後的腳步中會執行java -jar命令的jar的名稱就是「spring-skill-01」nginx

 

增長三個配置文件:git

application.properties:github

## dev | prod | test
spring.profiles.active=dev

 

application-dev.properties:web

name=\u5F00\u53D1\u73AF\u5883

 

application-prod.properties:spring

name=\u751F\u4EA7\u73AF\u5883

分別演示開發、生產環境的不一樣配置apache

 

項目結構爲:
tomcat

 

本地運行效果爲:

 

2、配置linux服務器


 

mkdir /opt/java
mkdir /opt/run
vi /opt/run/run.sh

「/opt/java」路徑是以後阿里雲持續交付平臺上傳文件的路徑

 

建立項目的目錄和運行項目的腳步文件

「/opt/run/run.sh」文件爲:
#!/bin/bash
cd /opt/java
ps aux | grep spring | xargs kill -9
tar -xzf package.tgz
java -jar /opt/java/spring-skill-01.jar --spring.profiles.active=prod

目的是:解壓阿里雲持續交付平臺上傳的項目,執行java -jar運行並生產環境的spring boot的jar,而「spring-skill-01.jar」就是以前在pom.xml節點<finalName>spring-skill-01</finalName>配置的。

 

3、配置阿里雲持續交付平臺


 

首先,登陸阿里雲git庫「https://code.aliyun.com/」 建立git項目

 

選擇一個私有項目

 

建立完項目後,選擇持續交付平臺菜單

 

 

建立持續交付項目

 

 

 

爲該項目建立工做流

 

選擇默認模板並輸入名稱

 

 

配置工做流節點「打包」,執行「mvn package」命令

 

配置部署節點,設置以前在服務器建立的路徑「/opt/java」

配置運行腳本的路徑

 

配置機器受權

 

點擊拷貝按鈕,複製所拷貝的key

 

在服務器新建文件和key文件

mkdir $HOME/.ssh/
vi $HOME/.ssh/authorized_keys

在「$HOME/.ssh/authorized_keys」文件中粘帖複製的key

 

4、運行效果


 

執行git命令push代碼

git add. 
git commit -m 'ok'
git push

 

因爲push代碼會觸發持續交付平臺的工做流

 

因此會按照以前設定好的腳本運行

 

 

部署完畢後,訪問服務器中項目:

 

 


 總結

   持續交付的整個簡單過程就演示完了,但上述方案並不完美。問題出在執行的腳本上,正式項目須要把spring boot建立成服務,使用服務中止的命令終止進程,而不是使用kill來殺死進程。另外,正式項目還須要部署多個web容器,以便於讓用戶不間斷和在察覺不到的狀況下更新程序,須要與nginx聯合使用。

 


 

代碼:https://github.com/carter659/spring-boot-skill-01.git

 

若是你以爲個人博客對你有幫助,能夠給我點兒打賞,左側微信,右側支付寶。

有可能就是你的一點打賞會讓個人博客寫的更好:)

 

返回玩轉spring boot系列目錄

相關文章
相關標籤/搜索