CI(Continuous integration)持续集成
参考:https://www.jianshu.com/p/2132949ff84a
持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作。
持续集成的目的,是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。注:持续集成简单来说,就是频繁的将代码集成到主干。将软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。
1.开发新功能
2.修复bug
CD (Continuous delivery) 持续交付
持续交付意味着每次更改代码,集成并构建代码时,他们还将在与生产非常相似的环境中自动测试该代码。我们将此部署到不同环境并在不同环境上进行测试的过程称为部署管道。部署管道通常具有开发环境,测试环境和过渡环境,但是这些阶段因团队,产品和组织而异。
是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率。
持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
Jenkins - CI/CD杰出的软件
jenkins是一款开源的CI&CD软件,用于自动化各种任务,包括构建、测试和部署软件
作为领先的开源自动化服务器,Jenkins 提供了数百个插件来支持构建、部署和自动化任何项目。
使用java开发的
1. 流程
2.pipline(流水线)和blueocean
pipline:操作过程和步骤,拉取代码、编译、测试、部署、镜像制作等操作blueocean是可以用来图形化管理(编写、查看、修改等)我们的流水线。是pipline的可视化UI。
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.访问验证
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.安装相关插件
使用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 文件,改成自己的主机名
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 <none> 8080:32000/TCP 25s
7.访问验证
可以访问k8s集群中的任何一台机器