一、配置仓库
二、创建项目
三、镜像文件
四、构建部署
五、验证测试
受篇幅限制,本文包含前三节内容,后三节内容请看《基于云效使用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
命令,将空的代码库下载本地
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.到阿里云容器镜像服务进行确认,可以看到基础镜像
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"]