- 目录
- 前言
-
一、配置仓库
- (一)配置私服仓库
-
二、创建项目
- (一)新建代码组
- (二)新建代码库
- (三)拉取代码
- (四)创建Maven项目
-
三、镜像文件
- (一)基础镜像
- (二)编写Dockerfile
-
四、构建部署
- (一)宿主机管理
- (二)创建流水线
-
五、验证测试
- (一)发布demo-domain
- (二)部署demo-service
- (三)访问demo-service
- 六、最后
受篇幅限制,本文包含前三节内容,后三节内容请看《基于云效使用Docker实现持续交付(下)》
前言
阿里云发布了最新[云效2020]产品。云效提供从“需求 ->开发->测试->发布->运维->运营”端到端的协同服务和研发工具,支持公共云、专有云和混合云多种部署形态,通过人工智能、自动化 技术的应用助力开发者提升研发效能,持续快速交付有效价值。
云效2020产品包含多个模块功能,例如项目协作、知识库、流水线、代码管理、测试环境、仓库管理等功能。本文主要介绍使用Docker进行Java项目构建部署,涉及仓库管理、代码管理、流水线等功能。
阅读文本前,您需要能够熟练使用Maven构建Java项目,并了解Docker相关的一些基础概念及命令。
提示:本文图片较多,建议在wifi环境下阅读,土豪随意~
一、配置仓库
(一)配置私服仓库
1.使用Maven构建Java项目,通常都会使用Maven私服仓库,以供内部二方库互相依赖及引用。这里,我们直接使用云效提供的Maven私服仓库。
2.访问阿里云官网,选择[公共云 免费使用]。
3.第一次访问需要填写企业名称,并开通服务。服务开通成功后,界面如下所示
4.点击左上角菜单按钮,找到并点击进入制品仓库
5.点击snapshot仓库地址,可以看到这个仓库下目前是空的,因为还未发布jar包到仓库。
6.找到左上角[指南]按钮,点击后切换页签,可以看到Maven配置指南。
7.这里,我们直接使用方式一,直接下载settings.xml文件,并重命名为settings-zccoder-2020.xml,放到Maven的conf目录下。
8.通常情况下,还需要配置本地仓库地址。
9.至此,Maven私服仓库配置完成。
二、创建项目
这里我们创建两个项目demo-domain
和demo-service
,用来模拟企业内部项目二方库互相依赖的场景。
demo-domain
用来存放一些POJO领域模型对象,单独发布jar包,以供其他项目使用。
demo-service
依赖于demo-domain
,是实现业务功能的项目,下面会使用Docker来进行部署。
(一)新建代码组
1.点击左上角菜单按钮,找到并点击进入代码管理
2.为方便管理,先新建demo代码组
(二)新建代码库
1.demo代码组新建成功后,则新建demo-domain
代码库
2.使用同样的方式,新建demo-service
代码库。创建完成后如下
(三)拉取代码
1.点击进入demo-domain
项目,第一次需要配置SSH密钥
2.SSH密钥配置完成后,使用git clone
命令,将空的代码库下载本地
(四)创建Maven项目
1.在创建Maven项目之前,需要设置IDE的Maven配置文件
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 deploy
将demo-domain
发布到私服仓库
5.通过日志,能够看到成功发布到私服仓库,再到私服仓库确认下,确实有了这个包
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
,显示成功
10.将之前的settings-zccoder-2020.xml文件复制到demo-domain
和demo-service
项目根目录,重命名为settings.xml
11.最后,将demo-domain
和demo-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.到阿里云容器镜像服务进行确认,可以看到基础镜像
(二)编写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"]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。