赞
踩
CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。
具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务通常被统称为"CI/CD 管道",由开发和运维团队以敏捷方式协同支持。
整体的流程框架如下:
持续集成指的是频繁的将代码集成到主干(相当于开发测试环境)。
开发人员提交了新代码之后,立刻自动的进行构建,执行单元测试和集成测试(可以通过 Jenkins 完成),开发人员只需要提交代码,就可以得到这次集成的结果,根据结果,可以确定新代码和原有代码能否正确地集成在一起。
完成 CI 中构建及单元测试和集成测试的自动化流程后,持续交付可自动将已验证的代码发布到存储库(手动:预投产环境->生产环境)。
STAGING 环境可以理解为预投产环境,测试人员、运维等在预投产环境上对最终要部署的项目做最后一轮验证。
如果预投产环境验证通过,需要手动部署到生产环境。
持续部署可以自动将应用发布到生产环境(自动:预投产环境->生产环境)。
持续交付和持续部署的区别就是最终部署到生产环境的过程是否自动化。
环境要求:需要提前安装GitLab、Jenkins、Docker
预期效果:将本地代码提交到GitLab仓库,通过Jenkins拉取代码->编译->生成镜像->部署,最后可以成功访问。
一个简单的springboot项目,目录结构如下:
Dockerfile
FROM daocloud.io/library/java:openjdk-8u40-jdk
COPY jiangnan.jar /usr/local/
WORKDIR /usr/local/
CMD java -jar jiangnan.jar
docker-compose.yml
version: '3.1'
services:
jiangnan:
build:
context: ./
dockerfile: Dockerfile
image: jiangnan:v1.0.0
container_name: jiangnan
ports:
- 8081:8080
TestController.java
@RestController
public class TestController {
@GetMapping("/test")
public String test(){
return "Hello World!";
}
}
pom.xml重点说明
<build>
<finalName>jiangnan</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
finalName表示最终jar包名称为jiangnan.jar,方便编写yaml文件。plugin防止
no main manifest attribute
异常。
源码管理配仓库地址,Jenkins会从指定的仓库中拉取代码。
指定我们之前配置好的maven,填写构建命令
clean package -Dmaven.test.skip=true
。
说明:Source files:将哪些文件传输到目标服务器。Exec command:需要执行的命令。
构建后的命令会在目标服务器上执行,目标服务器绑定方法我们在Jenkins基本配置中有讲解,当时我们设定的工作目录为/usr/local/test
这里使用了docker-compose拉起容器,后期可以改用kubernetes。
# 实际在目标服务器执行
cd /usr/local/test/docker # 跳转目录
mv ../target/*.jar ./ # 移动需要的文件(将jar包和Dockerfile、docker-compmse.yml放到同一目录下)
docker-compose down # 停止正在执行的服务
docker-compose up -d --build # 拉起新的服务
docker image prune -f # 删除因为同名产生<none>镜像
在目标服务器进行验证。
# 需要的文件已传输到指定目录下
[root@master test]# pwd
/usr/local/test
[root@master test]# ll
total 8
drwxr-xr-x 2 root root 4096 May 25 23:22 docker
drwxr-xr-x 2 root root 4096 May 25 23:22 target
[root@master test]#
# jiangnan:v1.0.0 镜像生成
[root@master docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jiangnan v1.0.0 92e5fb528868 23 seconds ago 832MB
daocloud.io/library/java openjdk-8u40-jdk 4aefdb29fd43 7 years ago 816MB
[root@master test]#
# 容器启动
[root@master test]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
15897f10137e jiangnan:v1.0.0 "/bin/sh -c 'java -j…" 39 seconds ago Up 38 seconds 0.0.0.0:8081->8080/tcp, :::8081->8080/tcp jiangnan
[root@master test]#
访问成功!
至此,一个完整CI流程基本完成。
点击下方微信公众号名片,获取更多内容。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。