当前位置:   article > 正文

【工具篇】CI/CD介绍,实操案例-CI持续集成_cicd

cicd

1. CI/CD介绍

CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。

具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务通常被统称为"CI/CD 管道",由开发和运维团队以敏捷方式协同支持。

整体的流程框架如下:

2. CI 持续集成(Continuous Integration)

持续集成指的是频繁的将代码集成到主干(相当于开发测试环境)。

开发人员提交了新代码之后,立刻自动的进行构建,执行单元测试和集成测试(可以通过 Jenkins 完成),开发人员只需要提交代码,就可以得到这次集成的结果,根据结果,可以确定新代码和原有代码能否正确地集成在一起。

3. CD 持续交付(Continuous Delivery)

完成 CI 中构建及单元测试和集成测试的自动化流程后,持续交付可自动将已验证的代码发布到存储库(手动:预投产环境->生产环境)。

STAGING 环境可以理解为预投产环境,测试人员、运维等在预投产环境上对最终要部署的项目做最后一轮验证。

如果预投产环境验证通过,需要手动部署到生产环境。

4. CD 持续部署(Continuous Deployment)

持续部署可以自动将应用发布到生产环境(自动:预投产环境->生产环境)。

持续交付和持续部署的区别就是最终部署到生产环境的过程是否自动化

5. 实操案例(CI持续集成)

环境要求:需要提前安装GitLab、Jenkins、Docker

预期效果:将本地代码提交到GitLab仓库,通过Jenkins拉取代码->编译->生成镜像->部署,最后可以成功访问。

  1. 编写代码,在本地正常运行。

一个简单的springboot项目,目录结构如下:

Dockerfile

FROM daocloud.io/library/java:openjdk-8u40-jdk
COPY jiangnan.jar /usr/local/
WORKDIR /usr/local/
CMD java -jar jiangnan.jar
  • 1
  • 2
  • 3
  • 4

docker-compose.yml

version: '3.1'
services:
  jiangnan:
    build:
      context: ./
      dockerfile: Dockerfile
    image: jiangnan:v1.0.0
    container_name: jiangnan
    ports:
    - 8081:8080
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

TestController.java

@RestController
public class TestController {
    @GetMapping("/test")
    public String test(){
        return "Hello World!";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

pom.xml重点说明

<build>
    <finalName>jiangnan</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

finalName表示最终jar包名称为jiangnan.jar,方便编写yaml文件。plugin防止no main manifest attribute异常。

  1. 代码提交gitlab仓库

  1. 配置Jenkins

  • 拉取代码。

源码管理配仓库地址,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>镜像
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 启动工程

  1. 验证

在目标服务器进行验证。

# 需要的文件已传输到指定目录下
[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]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

访问成功!

至此,一个完整CI流程基本完成。

点击下方微信公众号名片,获取更多内容。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/452157
推荐阅读
相关标签
  

闽ICP备14008679号