CI/CD 持续集成 持续交付

CI/CD 持续集成 持续交付_第1张图片

CI(Continuous integration)持续集成 

参考:https://www.jianshu.com/p/2132949ff84a 

持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作
持续集成的目的,是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。注:持续集成简单来说,就是频繁的将代码集成到主干。将软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。
    1.开发新功能
    2.修复bug

CI/CD 持续集成 持续交付_第2张图片

CI/CD 持续集成 持续交付_第3张图片

CD (Continuous delivery)    持续交付

持续交付意味着每次更改代码,集成并构建代码时,他们还将在与生产非常相似的环境中自动测试该代码。我们将此部署到不同环境并在不同环境上进行测试的过程称为部署管道。部署管道通常具有开发环境,测试环境和过渡环境,但是这些阶段因团队,产品和组织而异。

是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率。

持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。

CI/CD 持续集成 持续交付_第4张图片

CI/CD 持续集成 持续交付_第5张图片

Jenkins - CI/CD杰出的软件

jenkins是一款开源的CI&CD软件,用于自动化各种任务,包括构建、测试和部署软件 

作为领先的开源自动化服务器,Jenkins 提供了数百个插件来支持构建、部署和自动化任何项目。

使用java开发的

CI/CD 持续集成 持续交付_第6张图片

​ 

1. 流程

CI/CD 持续集成 持续交付_第7张图片

2.pipline(流水线)和blueocean

pipline:操作过程和步骤,拉取代码、编译、测试、部署、镜像制作等操作blueocean是可以用来图形化管理(编写、查看、修改等)我们的流水线。是pipline的可视化UI。

CI/CD 持续集成 持续交付_第8张图片

3. 安装部署

使用docker安装部署

1.拉取镜像

[root@k8snode-1 ~]# docker pull jenkinsci/blueocean

2.启动容器

docker run \
--name sc-jenkins-1 \
-u root \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
[root@k8snode-1 ~]# docker ps
CONTAINER ID   IMAGE                                               COMMAND                   CREATED         STATUS         PORTS                                                                                      NAMES
d824ac703b38   jenkinsci/blueocean                                 "/sbin/tini -- /usr/…"   5 seconds ago   Up 4 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   sc-jenkins-1

3.访问验证

CI/CD 持续集成 持续交付_第9张图片

4.解锁Jenkins

[root@k8snode-1 ~]# docker ps |grep -i jenkins
d824ac703b38   jenkinsci/blueocean                                 "/sbin/tini -- /usr/…"   13 minutes ago   Up 13 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   sc-jenkins-1
 
[root@k8snode-1 ~]# docker exec -it  sc-jenkins-1 bash
 
#查看登陆密码
bash-5.1#  cat /var/jenkins_home/secrets/initialAdminPassword
97ae6e914ab24130a8d9dfa12c07b952

5.安装相关插件

CI/CD 持续集成 持续交付_第10张图片

使用k8s安装部署

1.准备工作

官网:https://www.jenkins.io/doc/book/installing/kubernetes/

1.1.下载git
[root@k8smaster ~]# yum install git -y
1.2.从代码仓库拉取相关文件
[root@k8smaster ~]# git clone https://github.com/scriptcamp/kubernetes-jenkins
[root@k8smaster kubernetes-jenkins]# ls
deployment.yaml  namespace.yaml  serviceAccount.yaml  service.yaml  volume.yaml

2.创建相关命名空间

[root@k8smaster kubernetes-jenkins]# kubectl apply -f namespace.yaml
namespace/devops-tools created
[root@k8smaster kubernetes-jenkins]# kubectl get ns
NAME              STATUS   AGE
default           Active   105d
devops-tools      Active   7s

3.创建服务账号绑定集群角色

[root@k8smaster kubernetes-jenkins]# kubectl  apply -f serviceAccount.yaml 
clusterrole.rbac.authorization.k8s.io/jenkins-admin created
serviceaccount/jenkins-admin created
clusterrolebinding.rbac.authorization.k8s.io/jenkins-admin created

4.创建卷(存储数据)


4.1.查看节点信息
[root@k8smaster kubernetes-jenkins]# kubectl get node
NAME        STATUS   ROLES                  AGE    VERSION
k8smaster   Ready    control-plane,master   105d   v1.20.6
k8snode-1   Ready    worker                 105d   v1.20.6
k8snode-2   Ready    worker                 104d   v1.20.6
4.2.修改volume.yaml 文件,改成自己的主机名

CI/CD 持续集成 持续交付_第11张图片

4.3.创建卷
[root@k8smaster kubernetes-jenkins]# kubectl apply -f volume.yaml 
storageclass.storage.k8s.io/local-storage created
persistentvolume/jenkins-pv-volume created
persistentvolumeclaim/jenkins-pv-claim created

5.部署Jenkins

建议先删除之前使用docker容器安装的jenkins

[root@k8snode-1 ~]# docker stop sc-jenkins-1
sc-jenkins-1
[root@k8smaster kubernetes-jenkins]# kubectl apply  -f deployment.yaml 
deployment.apps/jenkins created

6.启动服务发布Jenkins的pod

[root@k8smaster kubernetes-jenkins]# kubectl apply -f service.yaml 
service/jenkins-service created
 
[root@k8smaster kubernetes-jenkins]# kubectl get svc -n devops-tools
NAME              TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
jenkins-service   NodePort   10.108.82.214           8080:32000/TCP   25s

7.访问验证

可以访问k8s集群中的任何一台机器

CI/CD 持续集成 持续交付_第12张图片

你可能感兴趣的:(ci/cd)