转载

基于云效使用Docker实现持续交付(上)

  • 目录
  • 前言
  • 一、配置仓库

    • (一)配置私服仓库
  • 二、创建项目

    • (一)新建代码组
    • (二)新建代码库
    • (三)拉取代码
    • (四)创建Maven项目
  • 三、镜像文件

    • (一)基础镜像
    • (二)编写Dockerfile
  • 四、构建部署

    • (一)宿主机管理
    • (二)创建流水线
  • 五、验证测试

    • (一)发布demo-domain
    • (二)部署demo-service
    • (三)访问demo-service
  • 六、最后

受篇幅限制,本文包含前三节内容,后三节内容请看《基于云效使用Docker实现持续交付(下)》

前言

阿里云发布了最新[云效2020]产品。云效提供从“需求 ->开发->测试->发布->运维->运营”端到端的协同服务和研发工具,支持公共云、专有云和混合云多种部署形态,通过人工智能、自动化 技术的应用助力开发者提升研发效能,持续快速交付有效价值。

云效2020产品包含多个模块功能,例如项目协作、知识库、流水线、代码管理、测试环境、仓库管理等功能。本文主要介绍使用Docker进行Java项目构建部署,涉及仓库管理、代码管理、流水线等功能。

阅读文本前,您需要能够熟练使用Maven构建Java项目,并了解Docker相关的一些基础概念及命令。

提示:本文图片较多,建议在wifi环境下阅读,土豪随意~

一、配置仓库

(一)配置私服仓库

1.使用Maven构建Java项目,通常都会使用Maven私服仓库,以供内部二方库互相依赖及引用。这里,我们直接使用云效提供的Maven私服仓库。

2.访问阿里云官网,选择[公共云 免费使用]。

基于云效使用Docker实现持续交付(上)

3.第一次访问需要填写企业名称,并开通服务。服务开通成功后,界面如下所示

基于云效使用Docker实现持续交付(上)

4.点击左上角菜单按钮,找到并点击进入制品仓库

基于云效使用Docker实现持续交付(上)

5.点击snapshot仓库地址,可以看到这个仓库下目前是空的,因为还未发布jar包到仓库。

基于云效使用Docker实现持续交付(上)

6.找到左上角[指南]按钮,点击后切换页签,可以看到Maven配置指南。

基于云效使用Docker实现持续交付(上)

7.这里,我们直接使用方式一,直接下载settings.xml文件,并重命名为settings-zccoder-2020.xml,放到Maven的conf目录下。

基于云效使用Docker实现持续交付(上)

8.通常情况下,还需要配置本地仓库地址。

基于云效使用Docker实现持续交付(上)

9.至此,Maven私服仓库配置完成。

二、创建项目

这里我们创建两个项目 demo-domaindemo-service ,用来模拟企业内部项目二方库互相依赖的场景。

demo-domain 用来存放一些POJO领域模型对象,单独发布jar包,以供其他项目使用。

demo-service 依赖于 demo-domain ,是实现业务功能的项目,下面会使用Docker来进行部署。

(一)新建代码组

1.点击左上角菜单按钮,找到并点击进入代码管理

基于云效使用Docker实现持续交付(上)

2.为方便管理,先新建demo代码组

基于云效使用Docker实现持续交付(上)

基于云效使用Docker实现持续交付(上)

(二)新建代码库

1.demo代码组新建成功后,则新建 demo-domain 代码库

基于云效使用Docker实现持续交付(上)

基于云效使用Docker实现持续交付(上)

2.使用同样的方式,新建 demo-service 代码库。创建完成后如下

基于云效使用Docker实现持续交付(上)

(三)拉取代码

1.点击进入 demo-domain 项目,第一次需要配置SSH密钥

基于云效使用Docker实现持续交付(上)

基于云效使用Docker实现持续交付(上)

2.SSH密钥配置完成后,使用 git clone 命令,将空的代码库下载本地

基于云效使用Docker实现持续交付(上)

基于云效使用Docker实现持续交付(上)

(四)创建Maven项目

1.在创建Maven项目之前,需要设置IDE的Maven配置文件

基于云效使用Docker实现持续交付(上)

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 发布到私服仓库

基于云效使用Docker实现持续交付(上)

5.通过日志,能够看到成功发布到私服仓库,再到私服仓库确认下,确实有了这个包

基于云效使用Docker实现持续交付(上)

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 ,显示成功

基于云效使用Docker实现持续交付(上)

10.将之前的settings-zccoder-2020.xml文件复制到 demo-domaindemo-service 项目根目录,重命名为settings.xml

基于云效使用Docker实现持续交付(上)

11.最后,将 demo-domaindemo-service 代码提交到远程代码库

三、镜像文件

(一)基础镜像

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.到阿里云容器镜像服务进行确认,可以看到基础镜像

基于云效使用Docker实现持续交付(上)

(二)编写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"]
原文  https://segmentfault.com/a/1190000022530075
正文到此结束
Loading...