DevOps-K8s+Jenkins+Gitlab实现CI/CD-部署微服务PiggyMetrics
DevOps意为“Development”和“Operations”,即为开发人员和运维人员之间沟通合作的开发模式,通过自动化“软件交付”和“架构更变”的流程,实现开发运维一体化,使得开发构建、测试、发布能够更加快捷、频繁和高效稳定。DevOps是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保证部门之间的沟通、协作与整合。它的出现时由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。其最大的特点就是极速的迭代和快速的用户反馈。
测试的devops系统架构流程如下:
基于现有的kubernetes集群和harbor镜像仓库,搭建以docker运行的gitlab代码仓库和CI工具jenkins,并编写自动化流水线脚本。
1.部署jenkins
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。我们通过容器部署jenkins服务
容器名称:jenkins;端口映射:8080:8080;使用root身份生成容器;
[root@master opt]# docker run -itd --name jenkins -p 8881:8080 -u root -v /home/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /usr/bin/kubectl:/usr/local/bin/kubectl -v /root/.kube:/root/.kube jenkins/jenkins:2.262-centos
设置jenkins
在web端通过http://IP:8080访问Jenkins
查看默认密码:
[root@master ~]# docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
54670064056e42a2a47485a5e3356e57
输入密码并点击“继续”
选择“安装推荐的插件”,如图所示:
插件安装完成后自动转入管理员用户创建界面
输入用户信息,点击“保存并完成”
配置完URL后使用新建的用户登录Jenkins,如图
2.部署Gitlab
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。
我们这里也是通过容器部署gitlab服务
容器名称:gitlab;端口映射:1022:22、81:80、443:443;容器重启策略:always;
[root@master opt]# docker run -itd --name gitlab -p 81:80 -p 443:443 -v /root/gitlab/config:/etc/gitlab -v /root/gitlab/logs:/var/log/gitlab -v /root/gitlab/data:/var/opt/gitlab --restart always gitlab/gitlab-ce:12.9.2-ce.0
设置root用户信息并使用root用户登录Gitlab,如图所示:
创建项目“Create a project”
我们就可以在本地通过git上传代码到仓库
git init
git remote add origin http://ip/xxxx.git
git add .
git commit -m 'upload'
git push -u origin master
3.配置Jenkins对接Gitlab
gitlab设置Outbound requests
生成“Access Tokens”并命名为jenkins
设置Jenkins取消对’/project’ end-point进行身份验证;
jenkins添加gitlab api token
4.配置Jenkins连接maven
采用docker in docker的方式在Jenkins内安装maven
[root@master ~]# cp apache-maven-3.6.3-bin.tar.gz /root/jenkins/
[root@master ~]# docker exec -it jenkins bash
[root@b957b62337cc /]# cd /var/jenkins_home/
[root@b957b62337cc jenkins_home]# tar -zxvf apache-maven-3.6.3-bin.tar.gz -C .
[root@2927036f2450 jenkins_home]# mv apache-maven-3.6.3 /usr/local/maven
//配置maven环境变量
[root@b957b62337cc jenkins_home]# vi /etc/profile
export M2_HOME=/usr/local/maven
export PATH=$PATH:$M2_HOME/bin
[root@2927036f2450 /]# vim /root/.bashrc
if [ -f /etc/bashrc ]; then
. /etc/bashrc
source /etc/profile
fi
在Jenkins中配置maven信息
Dashboard-全局工具配置
5.配置CI/CD
新建流水线任务
配置触发器
编写流水线脚本
构建微服务项目中的gateway和config服务,
将构建后的镜像自动上传到Harbor仓库,
并自动发布gateway和config服务到Kubernetes集群的springcloud命名空间下
node{
stage('git clone'){
//check CODE 从代码仓库克隆
git credentialsId: 'ad561b3b-5252-43d5-b9c4-ec9bece0134c', url: 'http://IP/xxx.git'
}
stage('maven build'){
//maven编译
sh '''/usr/local/maven/bin/mvn package -DskipTests -f /var/jenkins_home/workspace/xxx'''
}
stage('image build'){
//构建镜像,并将镜像ID变量作为tag
sh '''
echo $BUILD_ID
docker build -t 10.24.2.10/xxx/gateway:$BUILD_ID -f /var/jenkins_home/workspace/xxx/gateway/Dockerfile /var/jenkins_home/workspace/xxx/gateway
docker build -t 10.24.2.10/xxx/config:$BUILD_ID -f /var/jenkins_home/workspace/xxx/config/Dockerfile /var/jenkins_home/workspace/xxx/config'''
}
stage('test'){
//测试镜像
sh '''docker run -itd --name gateway 10.24.2.10/xxx/gateway:$BUILD_ID
docker ps -a|grep chinaskillproject|grep Up
if [ $? -eq 0 ];then
echo "Success!"
docker rm -f gateway
else
docker rm -f gateway
exit 1
fi
'''
}
stage('upload registry'){
//上传构建完成的镜像到harbor镜像仓库
sh '''docker login 10.24.2.10 -u=admin -p=xxxxxxxxxxxxxx
docker push 10.24.2.10/chinaskillproject/gateway:$BUILD_ID
docker push 10.24.2.10/chinaskillproject/config:$BUILD_ID'''
}
stage('deploy k8s'){
//创建命名空间,部署yaml脚本到k8s集群
sh 'kubectl create ns springcloud'
sh 'kubectl apply -f /var/jenkins_home/workspace/xxx/yaml/deployment/gateway-deployment.yaml --kubeconfig=/root/.kube/config'
sh 'kubectl apply -f /var/jenkins_home/workspace/xxx/yaml/deployment/config-deployment.yaml --kubeconfig=/root/.kube/config'
sh 'kubectl apply -f /var/jenkins_home/workspace/xxx/yaml/svc/gateway-svc.yaml --kubeconfig=/root/.kube/config'
sh 'kubectl apply -f /var/jenkins_home/workspace/xxx/yaml/svc/config-svc.yaml --kubeconfig=/root/.kube/config'
}
}
•
配置gitlab的webhook
Gitlab,进入项目,点击左侧导航栏“Settings”→“Webhooks”,
将GitLab webhook URL地址填入URL处,禁用SSL认证,如图所示。
点击“Add webhook”添加webhook
点击“Push events”进行测试
结果返回HTTP 200则表明Webhook配置成功。
6.触发流水线
git重新提交代码,触发流水线
[root@master ]# git commit -m "Initial commit"
# On branch master
nothing to commit, working directory clean
[root@master ]# git push -u origin master
触发后开始运行
流水线一路绿灯,构建部署成功
微服务成功部署在k8s集群,CI/CD部署完成
测试中的微服务开源地址:https://github.com/sqshq/PiggyMetrics
- 点赞
- 收藏
- 关注作者
评论(0)