一、CICD
CI/CD(Continuous Integration/Continuous Delivery)指的是一种软件开发流程,通过自动化的方式将代码集成到主干分支,并且持续地将代码交付给用户。全程包括以下几个步骤:
-
集成(Integration):开发人员将他们开发好的代码集成到主干分支。这个过程中,可以使用版本控制工具(如Git)来管理代码的版本,确保团队成员之间的协同开发。
-
持续集成(Continuous Integration):在代码集成到主干之前,进行自动化测试。这些测试用例可以检查代码是否满足预期的功能、性能和质量要求。如果有任何一个测试用例失败,代码将不能集成到主干分支,开发人员需要修复错误后再次尝试集成。
-
持续交付(Continuous Delivery):一旦代码成功地集成到主干分支,它将被自动构建和打包成可执行的软件。这个过程可以使用自动化工具(如Jenkins)来实现,以确保软件的可靠性和一致性。
-
持续部署(Continuous Deployment):在持续交付的基础上,将软件部署到目标环境中(如测试环境、生产环境等)。这个过程可以使用自动化工具和配置管理工具(如Ansible)来实现,以减少手动操作和人为错误。
通过实施CI/CD流程,可以提高软件开发的效率和质量,减少开发团队之间的协调工作,同时使得软件的交付更加快速和可靠
二、项目原理
开发人员提交完代码至版本控制器后,由Jenkins自动获取远程代码,自动打包,自动创建镜像,上传仓库,然后自动部署Kubernetes容器集群
三、项目过程
1. 项目现有环境:
一台 jinkens,内有docker maven jdk1.80 kubectl命令
三台k8s master两台node
2. jinkens添加免密,k8sconfig文件
jinkens主机生成公钥私钥
[root@localhost ~]# ssh-key
复制私钥到jinkens页面添加全局配置Private Key下
[root@localhost .ssh]# cat id_rsa
复制公钥到GitLab页面添加ssh免密
[root@localhost .ssh]# cat id_rsa.pub
将k8smaster-config文件复制到jinkens下,让jinkens可以控制node集群
[root@jinkens ~]# mkdir .kube
[root@master ~]# scp .kube/config jinkens@jinkensIP:/root/.kube/
[root@jinkens ~]# ls .kube/ config
3.进入jinkens,编写流水线piplien,执行
git拉取git仓库代码 (创建流水线) 下面自动创建piplien代码
steps { checkout scmGit(branches: [[name: '*/master']], userRemoteConfigs: [[credentialsId: '4c0c9124-4d1f-4c75-8021-0a7eae27faf4', url: 'git@codeup.aliyun.com:64d88e6f950bdf4486a599b7/jar-demo.git']])
}
使用mvn打包对代码打包,需要添加tools配置
tools {
jdk 'jdk1.8'
maven 'mvn'
}
需要提前在jinkens网页配置中的tools添加jdk、maven
执行sh语句进行mavn编译
sh "mvn clean install"
编写dokerfile构建镜像,上传镜像仓库,部署k8s
添加一个jdk1.80包,放在jinkens的工作目录下
cat >> END > Dockerfile
FROM centos7
ADD ./jdk-u80.tar /root/jdk.1.8
ADD ./target/demo.jar /root/
CMD /root/jdk1.8/java -jar /root/demo.jar
END
进行build构建镜像并上传镜像仓库
用yaml文件pull镜像仓库镜像,进行部署容器集群
使用ingress-nginx并通过yaml七层进行调度