基于云效使用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实现持续交付(上)_第1张图片

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

基于云效使用Docker实现持续交付(上)_第2张图片

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

基于云效使用Docker实现持续交付(上)_第3张图片

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

基于云效使用Docker实现持续交付(上)_第4张图片

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

基于云效使用Docker实现持续交付(上)_第5张图片

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

基于云效使用Docker实现持续交付(上)_第6张图片

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

基于云效使用Docker实现持续交付(上)_第7张图片

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

二、创建项目

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

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

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

(一)新建代码组

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

基于云效使用Docker实现持续交付(上)_第8张图片

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

基于云效使用Docker实现持续交付(上)_第9张图片

基于云效使用Docker实现持续交付(上)_第10张图片

(二)新建代码库

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

基于云效使用Docker实现持续交付(上)_第11张图片

基于云效使用Docker实现持续交付(上)_第12张图片

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

基于云效使用Docker实现持续交付(上)_第13张图片

(三)拉取代码

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

基于云效使用Docker实现持续交付(上)_第14张图片

基于云效使用Docker实现持续交付(上)_第15张图片

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

基于云效使用Docker实现持续交付(上)_第16张图片

基于云效使用Docker实现持续交付(上)_第17张图片

(四)创建Maven项目

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

基于云效使用Docker实现持续交付(上)_第18张图片

2.创建demo-domain项目,pom文件如下



    4.0.0
    com.zccoder
    demo-domain
    1.0.0-SNAPSHOT
    jar

    
        1.8
        1.8
        UTF-8
        UTF-8
    

    
        
            org.projectlombok
            lombok
            1.18.8
        
    

    
        
            rdc-releases
            https://packages.aliyun.com/maven/repository/2001067-release-pF311P/
        
        
            rdc-snapshots
            https://packages.aliyun.com/maven/repository/2001067-snapshot-MP1zHb/
        
    


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实现持续交付(上)_第19张图片

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

基于云效使用Docker实现持续交付(上)_第20张图片

6.创建demo-service项目,pom文件如下



    4.0.0

    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.6.RELEASE
        
    
    
    com.zccoder
    demo-service
    1.0.0-SNAPSHOT
    jar

    
        1.8
        1.8
        UTF-8
        UTF-8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.projectlombok
            lombok
        

        
            org.apache.commons
            commons-collections4
            4.4
        

        
            com.zccoder
            demo-domain
            1.0.0-SNAPSHOT
        
    

    
        demo-service
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


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实现持续交付(上)_第21张图片

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

基于云效使用Docker实现持续交付(上)_第22张图片

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实现持续交付(上)_第23张图片

(二)编写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"]

你可能感兴趣的:(java,docker,devops,后端,maven)