基于Kubernetes构建持续集成

[label]技术支持:窦智勇[/label]

所需软件包

该公司决定采用GitLab +Jenkins来构建CICD环境,以缩短新功能开发上线周期,及时满足客户的需求,实现DevOps的部分流程,来减轻部署运维的负担,实现可视化容器生命周期管理、应用发布和版本迭代更新,请完成GitLab + Jenkins + Kubernetes的CICD环境部署(构建持续集成所需要的所有软件包在软件包Jenkins_offline.tar中)。CICD应用系统架构如下:

img

在master节点上使用镜像jenkins/jenkins:2.262-centos部署Jenkins服务,

具体要求如下:

(1)容器名称:jenkins;

(2)端口映射:8080:8080;

(3)使用root身份生成容器;

(4)离线安装Jenkins插件;

(5)设置Jenkins用户:chinaskill;密码:000000;

(6)在授权策略中配置“任何用户可以做任何事(没有任何限制)”。

[root@master ~]# vim docker-compose.yml
version: "3"
services:
  jenkins:
    container_name: jenkins
    image: jenkins/jenkins
    ports:
    - "8080:8080"
    volumes:
    - "/home/jenkins_home:/var/jenkins_home"  #如果jenkins起不来就把这行注释
    - "/usr/bin/docker:/usr/bin/docker"      #docker命令
    - "/usr/bin/kubectl:/usr/local/bin/kubectl"  #kubectl命令
    - "/var/run/docker.sock:/var/run/docker.sock" #docker锁文件
    - "/root/.kube:/root/.kube"

###通过docker-compose up -d启动Jenkins

离线安装插件

###找到插件包
[root@master CICD]# ls 
apache-maven-3.6.3-bin.tar.gz gitlab jenkins.tar 
repository ChinaskillProject jenkins plugins ###插件包 

###copy到Jenkins家目录下
[root@master CICD]# docker cp plugins/ 23e29963b96d:/var/jenkins_home/

###重启Jenkins
[root@master jenkins]# docker stop 6070eb42546f 
6070eb42546f 
[root@master jenkins]# docker start 6070eb42546f 
6070eb42546f

浏览器访问IP:8080

img

 ###进入容器
[root@master jenkins]# docker exec -it 6070eb42546f /bin/bash 

###查看密码
jenkins@6070eb42546f:/$ cat /var/jenkins_home/secrets/initialAdminPassword 
9b07aba3086e4b7c811b2881018c5e88

配置安全策略

系统配置——->全局安全配置——->策略授权

img

img

安装Gitlab环境

在master节点上使用镜像gitlab/gitlab-ce:12.9.2-ce.0部署Gitlab服务,具体要求如下:

(1)容器名称:mygitlab;

(2)端口映射:1022:22、81:80、443:443;

(3)容器重启策略:always;

(4)设置root用户及密码;

(5)使用root用户登录Gitlab,密码:00000000;

(6)新建项目ChinaskillProject,将/opt/ChinaskillProject中的代码上传到ChinaskillProject项目中。

[root@master ~]# vim docker-compose.yml
version: "3"
services:
  gitlab:
    container_name: gitlab
    image: gitlab/gitlab-ce:12.9.2-ce.0
    ports:
    - "1022:22"
    - "80:80"
    - "443:443"
    restart: always

浏览器访问IP:80

创建项目

img

上传项目

img

[root@master gitlab]# yum install git -y
[root@master gitlab]# git init
[root@master gitlab]# git add .
[root@master gitlab]# git rermote add origin http://IP:30880/root/chinaskillproject.git
[root@master gitlab]# git commit -m "gpmall"
[root@master gitlab]# git push -u origin --all

配置Jenkins连接Gitlab

配置Jenkins连接Gitlab,具体要求如下:

(1)设置Outbound requests;

(2)生成“Access Tokens”并命名为jenkins;

(3)设置Jenkins取消对’/project’ end-point进行身份验证;

(4)测试Jenkins与Gitlab的连通性。

[label]技术支持已难哭在厕所[/label]

配置Jenkins连接maven

配置Jenkins连接maven,具体要求如下:

(1)采用docker in docker的方式在Jenkins内安装maven;

(2)在Jenkins中配置maven信息。

配置docker in docker

###docker命令和锁文件已经挂载到容器内,只需修改权限
[root@master CICD]# ll /var/run/docker.sock  
srw-rw---- 1 root docker 0 Feb 26 08:40 /var/run/docker.sock 
[root@master CICD]# chmod 666 /var/run/docker.sock 
[root@master CICD]# ll /var/run/docker.sock  
srw-rw-rw- 1 root docker 0 Feb 26 08:40 /var/run/docker.sock

###在docker容器中可以使用docker命令就算配置成功
[root@master CICD]# docker exec -it 23e29963b96d /bin/bash 
bash-4.4$ docker images

在jenkins中安装maven

###Jenkins容器中没有tar命令,需要在本地解压,copy到容器中
[root@master CICD]# tar xvf jdk-8u141-linux-x64.tar.gz -C /usr/local/  ###java环境
[root@master CICD]# tar xvf apache-maven-3.8.5.tar.gz -C /usr/local/

###配置本地maven仓库地址及阿里云镜像加速:
[root@master ~]# vim /usr/local/apache-maven-3.8.5/conf/settings.xml
<!-- 本地仓库地址 -->
<localRepository>/opt/localrepo</localRepository> 
<!-- 阿里云maven仓库镜像地址,加速jar包下载速度 -->
<mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror> 
    <id>aliyun-maven</id>
    <mirrorOf>*</mirrorOf> 
    <name>aliyun maven</name> 
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>


[root@master CICD]# docker cp /usr/local/maven/ 23e29963b96d:/usr/local/ 
[root@master CICD]# docker cp /usr/local/jdk1.8.0_121/ 23e29963b96d:/usr/local/

###在本地编写环境变量copy至容器
[root@master CICD]# vim /etc/profile
###末尾添加
export JAVA_HOME=/usr/local/jdk1.8.0_121/
export PATH=$PATH:/usr/local/apache-maven-3.8.5/bin:$JAVA_HOME/bin

###进入容器启用变量
[root@master CICD]# docker cp /etc/profile 23e29963b96d:/etc/
bash-4.4$ source /etc/profile 

bash-4.4$ echo $JAVA_HOME 
/usr/local/jdk1.8.0_121/ 

bash-4.4$ echo $MAVEN_HOME 
/usr/local/maven

bash-4.4$ mvn -v 
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) 
Maven home: /usr/local/maven 
Java version: 1.8.0_121, vendor: Oracle Corporation, runtime: 
/usr/local/jdk1.8.0_121/jre 
Default locale: en_US, platform encoding: ANSI_X3.4-1968 
OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"

在Jenkins中配置maven信息

系统配置——->全局工具配置——->配置Java–配置maven——->保存

img

img

配置CI/CD

配置CI/CD,具体要求如下:

(1)新建一个流水线模块ChinaskillProject;

(2)编写流水线脚本,构建ChinaskillProject项目中的gateway和config服务,将构建后的镜像自动上传到Harbor仓库的chinaskillproject项目,并自动发布gateway和config服务到Kubernetes集群的springcloud命名空间下;

(3)配置Webhook;

(4)在Harbor中新建公开项目chinaskillproject。

[label]技术支持哭晕在厕所[/label]

触发CI/CD

将ChinaskillProject项目中的代码上传到Gitlab中触发构建

[label]技术支持已抬走[/label]

标题: 基于Kubernetes构建持续集成

链接: https://zhiyong0389.github.io/2023/03/11/%E5%9F%BA%E4%BA%8EKubernetes%E6%9E%84%E5%BB%BA%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/

版权声明: 若无特殊标注皆为 智勇 原创版权, 转载请以链接形式注明作者及原始出处

最后编辑时间: 2023-06-29

本站由免费云加速(FreeCDN)提供网站加速和攻击防御服务