基於雲效使用Docker實現持續交付(上)

  • 目錄
  • 前言
  • 1、配置倉庫java

    • (一)配置私服倉庫
  • 2、建立項目linux

    • (一)新建代碼組
    • (二)新建代碼庫
    • (三)拉取代碼
    • (四)建立Maven項目
  • 3、鏡像文件git

    • (一)基礎鏡像
    • (二)編寫Dockerfile
  • 4、構建部署web

    • (一)宿主機管理
    • (二)建立流水線
  • 5、驗證測試spring

    • (一)發佈demo-domain
    • (二)部署demo-service
    • (三)訪問demo-service
  • 6、最後

受篇幅限制,本文包含前三節內容,後三節內容請看《基於雲效使用Docker實現持續交付(下)》docker

前言

阿里雲發佈了最新[雲效2020]產品。雲效提供從「需求 ->開發->測試->發佈->運維->運營」端到端的協同服務和研發工具,支持公共雲、專有云和混合雲多種部署形態,經過人工智能、自動化 技術的應用助力開發者提高研發效能,持續快速交付有效價值。apache

雲效2020產品包含多個模塊功能,例如項目協做、知識庫、流水線、代碼管理、測試環境、倉庫管理等功能。本文主要介紹使用Docker進行Java項目構建部署,涉及倉庫管理、代碼管理、流水線等功能。centos

閱讀文本前,您須要可以熟練使用Maven構建Java項目,並瞭解Docker相關的一些基礎概念及命令。app

提示:本文圖片較多,建議在wifi環境下閱讀,土豪隨意~運維

1、配置倉庫

(一)配置私服倉庫

1.使用Maven構建Java項目,一般都會使用Maven私服倉庫,以供內部二方庫互相依賴及引用。這裏,咱們直接使用雲效提供的Maven私服倉庫。

2.訪問阿里雲官網,選擇[公共雲 無償使用]。

20200501-101.png

3.第一次訪問須要填寫企業名稱,並開通服務。服務開通成功後,界面以下所示

20200501-102.png

4.點擊左上角菜單按鈕,找到並點擊進入製品倉庫

20200501-103.png

5.點擊snapshot倉庫地址,能夠看到這個倉庫下目前是空的,由於還未發佈jar包到倉庫。

20200501-104.png

6.找到左上角[指南]按鈕,點擊後切換頁籤,能夠看到Maven配置指南。

20200501-105.png

7.這裏,咱們直接使用方式一,直接下載settings.xml文件,並重命名爲settings-zccoder-2020.xml,放到Maven的conf目錄下。

20200501-106.png

8.一般狀況下,還須要配置本地倉庫地址。

20200501-107.png

9.至此,Maven私服倉庫配置完成。

2、建立項目

這裏咱們建立兩個項目demo-domaindemo-service,用來模擬企業內部項目二方庫互相依賴的場景。

demo-domain用來存放一些POJO領域模型對象,單獨發佈jar包,以供其餘項目使用。

demo-service依賴於demo-domain,是實現業務功能的項目,下面會使用Docker來進行部署。

(一)新建代碼組

1.點擊左上角菜單按鈕,找到並點擊進入代碼管理

20200501-201.png

2.爲方便管理,先新建demo代碼組

20200501-202.png

20200501-203.png

(二)新建代碼庫

1.demo代碼組新建成功後,則新建demo-domain代碼庫

20200501-204.png

20200501-205.png

2.使用一樣的方式,新建demo-service代碼庫。建立完成後以下

20200501-206.png

(三)拉取代碼

1.點擊進入demo-domain項目,第一次須要配置SSH密鑰

20200501-207.png

20200501-208.png

2.SSH密鑰配置完成後,使用git clone命令,將空的代碼庫下載本地

20200501-209.png

20200501-210.png

(四)建立Maven項目

1.在建立Maven項目以前,須要設置IDE的Maven配置文件

20200501-211.png

2.建立demo-domain項目,pom文件以下

<?xml version="1.0" encoding="UTF-8"?>
<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.zccoder</groupId>
    <artifactId>demo-domain</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
        </dependency>
    </dependencies>

    <distributionManagement>
        <repository>
            <id>rdc-releases</id>
            <url>https://packages.aliyun.com/maven/repository/2001067-release-pF311P/</url>
        </repository>
        <snapshotRepository>
            <id>rdc-snapshots</id>
            <url>https://packages.aliyun.com/maven/repository/2001067-snapshot-MP1zHb/</url>
        </snapshotRepository>
    </distributionManagement>

</project>

3.編寫User

package com.zccoder.demo.domain;

import java.io.Serializable;

import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 用戶實體
 *
 * @author zc
 * @date 2020/04/30
 */
@Data
@NoArgsConstructor
public class User implements Serializable {

    /**
     * 用戶編號
     */
    private Integer uid;
    /**
     * 用戶名稱
     */
    private String userName;

}

4.執行mvn -X -Dmaven.test.skip=true clean deploydemo-domain發佈到私服倉庫

20200501-212.png

5.經過日誌,可以看到成功發佈到私服倉庫,再到私服倉庫確認下,確實有了這個包

20200501-213.png

6.建立demo-service項目,pom文件以下

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/>
    </parent>
    
    <groupId>com.zccoder</groupId>
    <artifactId>demo-service</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.4</version>
        </dependency>

        <dependency>
            <groupId>com.zccoder</groupId>
            <artifactId>demo-domain</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>demo-service</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

7.編寫HelloApplication

package com.zccoder.demo.service;

import com.zccoder.demo.domain.User;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.constraints.NotNull;

/**
 * 啓動類
 *
 * @author zc
 * @date 2020/04/30
 */
@RestController
@RequestMapping("/hello")
@SpringBootApplication
public class HelloApplication {

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

    @GetMapping
    public String say(@NotNull User user) {
        return "Hello " + user.toString();
    }

}

8.配置application.properties

server.port=8081

9.啓動HelloApplication,並訪問http://127.0.0.1:8081/hello?uid=1&userName=Demo,顯示成功

20200501-214.png

10.將以前的settings-zccoder-2020.xml文件複製到demo-domaindemo-service項目根目錄,重命名爲settings.xml

20200501-215.png

11.最後,將demo-domaindemo-service代碼提交到遠程代碼庫

3、鏡像文件

(一)基礎鏡像

1.編寫基礎鏡像Dockerfile,提供JDK環境、時區等基礎環境

FROM centos:7

#安裝wget工具
RUN yum -y install wget

#下載而且安裝jdk設置環境變量
COPY jdk-8u201-linux-x64.rpm jdk-8u201-linux-x64.rpm
RUN rpm -ivh jdk-8u201-linux-x64.rpm
ENV JAVA_HOME /usr/java/latest/
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
RUN rm -rf jdk-8u201-linux-x64.rpm

#時區中文等處理
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo 'Asia/Shanghai' >/etc/timezone
RUN yum -y install kde-l10n-Chinese

#配置顯示中文
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LC_ALL zh_CN.utf8
RUN echo "export LC_ALL=zh_CN.utf8" >> /etc/profile

2.在基礎鏡像Dockerfile文件所在目錄,執行命令

docker build -t registry.cn-shenzhen.aliyuncs.com/zccoder/zccoder-jdk1.8:v1 .

3.構建好基礎鏡像,並使用下面命令推送到阿里雲容器鏡像服務

docker push registry.cn-shenzhen.aliyuncs.com/zccoder/zccoder-jdk1.8:v1

4.到阿里雲容器鏡像服務進行確認,能夠看到基礎鏡像

20200501-301.png

(二)編寫Dockerfile

1.構建好基礎鏡像後,就是編寫服務層鏡像。

2.在項目根目錄建立Dockerfile文件,內容以下便可

# 依賴基礎鏡像
FROM registry.cn-shenzhen.aliyuncs.com/zccoder/zccoder-jdk1.8:v1

COPY demo-service.jar /demo-service.jar

CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo-service.jar"]
相關文章
相關標籤/搜索