玩转spring boot——结合阿里云持续交付

前言

  在互联网项目中,项目测试、部署往往需要花费大量时间。传统方式是在本地打包、测试完毕程序,然后通过ftp上传至服务器,再把测试的配置文件修改为生产环境的配置文件,最后重新运行服务。这一过程如果交给人工完成往往容易出错,如项目有大量的配置,而仅有一处配置不正确将会发生重大的灾难,因此项目的持续集成和持续交付则尤为重要。之前,笔者的项目是通过git+maven+tomcat+jenkins来完成的,而如今阿里云推出了持续交付平台,笔者来为大家踩坑。

 

一、准备工作(spring boot+maven的项目)


 

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”

 

增加三个配置文件:

application.properties:

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

 

application-dev.properties:

name=\u5F00\u53D1\u73AF\u5883

 

application-prod.properties:

name=\u751F\u4EA7\u73AF\u5883

分别演示开发、生产环境的不同配置

 

项目结构为:

 

本地运行效果为:

 

二、配置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>配置的。

 

三、配置阿里云持续交付平台


 

首先,登录阿里云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

 

四、运行效果


 

执行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系列目录

posted @ 2017-01-23 03:14  冬子哥  阅读(3634)  评论(3编辑  收藏  举报