DevOps-K8s+Jenkins+Gitlab实现CI/CD-部署微服务PiggyMetrics

嚯嚯嚯www 发表于 2022/05/19 15:21:44 2022/05/19
【摘要】 DevOps意为“Development”和“Operations”,即为开发人员和运维人员之间沟通合作的开发模式,通过自动化“软件交付”和“架构更变”的流程,实现开发运维一体化,使得开发构建、测试、发布能够更加快捷、频繁和高效稳定。DevOps是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保证部门之间的沟通、协作与整合。它的出现时由于软件行业日益清晰地认识...

DevOps意为“Development”和“Operations”,即为开发人员和运维人员之间沟通合作的开发模式,通过自动化“软件交付”和“架构更变”的流程,实现开发运维一体化,使得开发构建、测试、发布能够更加快捷、频繁和高效稳定。DevOps是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保证部门之间的沟通、协作与整合。它的出现时由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。其最大的特点就是极速的迭代和快速的用户反馈。
测试的devops系统架构流程如下:
基于现有的kubernetes集群和harbor镜像仓库,搭建以docker运行的gitlab代码仓库和CI工具jenkins,并编写自动化流水线脚本。
image.png

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
image.png

查看默认密码:

[root@master ~]#  docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
54670064056e42a2a47485a5e3356e57

输入密码并点击“继续”
image.png

选择“安装推荐的插件”,如图所示:
image.png

插件安装完成后自动转入管理员用户创建界面
image.png

输入用户信息,点击“保存并完成”
image.png

配置完URL后使用新建的用户登录Jenkins,如图
image.png

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,如图所示:
image.png
image.png

创建项目“Create a project”
image.png

我们就可以在本地通过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
image.png

生成“Access Tokens”并命名为jenkins
image.png

设置Jenkins取消对’/project’ end-point进行身份验证;
image.png

jenkins添加gitlab api token
image.png

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-全局工具配置
image.png

5.配置CI/CD

新建流水线任务
image.png
配置触发器
image.png

image.png

编写流水线脚本
构建微服务项目中的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'
    }
}

image.png

配置gitlab的webhook
Gitlab,进入项目,点击左侧导航栏“Settings”→“Webhooks”,
将GitLab webhook URL地址填入URL处,禁用SSL认证,如图所示。
image.png

点击“Add webhook”添加webhook
image.png

点击“Push events”进行测试
image.png

结果返回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

触发后开始运行
image.png

流水线一路绿灯,构建部署成功
image.png

微服务成功部署在k8s集群,CI/CD部署完成
image.png

测试中的微服务开源地址:https://github.com/sqshq/PiggyMetrics

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。