基于kubernetes/k8s 构建Jenkins持续集平台(下)

基于kubernetes/k8s 构建Jenkins持续集平台(下)

jenkins-master Slave 架构

image-20220308151546546

安装和配置NFS

NFS简介

NFS(Network File System),它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。我们可以利用NFS共享Jenkins运行的配置文件、Maven的仓库依赖文件等

NFS安装

我们把NFS服务器安装在master机器上

安装NFS服务(所有k8s的节点都需要安装)

yum -y install nfs-utils

master上创建共享目录

创建共享目录,用于存放Jenkins的配置文件

mkdir -p /opt/nfs/jenkins

cat >> /etc/exports << 'EOF'
/opt/nfs/jenkins *(rw,no_root_squash)
EOF

启动服务,查看NFS共享目录

启动服务

systemctl enable nfs --now

在三台k8s机器上,查看共享目录

showmount -e 192.168.23.15

image-20220308152733844

image-20220308152744372

image-20220308152756544

在Kubernetes安装Jenkins-Master

创建NFS client provisioner

nfs-client-provisioner 是一个Kubernetes的简易NFS的外部provisioner,本身不提供NFS,需要现有的NFS服务器提供存储。

上传nfs-client-provisioner构建文件

链接:https://pan.baidu.com/s/1GIH18-iNF0m8TMiQNAxVeA?pwd=mpcw
提取码:mpcw

ls 
unzip nfs-client.zip 
cd nfs-client
sed -i '/192.*/ s/192.*/192.168.23.15/g'  deployment.yaml

image-20220308154141989

image-20220308154455344

构建nfs-client-provisioner的pod资源

cd nfs-client
kubectl apply -f .

image-20220308155145612

image-20220308155226096

查看pod是否安装成功

kubectl get pods

image-20220308155817704

安装Jenkins-Master

上传Jenkins-Master 构建文件

链接:https://pan.baidu.com/s/1RwioaFdgCk-tB4cEWF5ovQ?pwd=52d5
提取码:52d5

unzip jenkins-master.zip
cd jenkins-master/
ls

image-20220308160140312

image-20220308160216209

其中有两点注意:

第一、在StatefulSet.yaml文件,声明了利用nfs-client-provisioner进行Jenkins-Master文件存储

image-20220308160327377

第二、Service发布方法采用NodePort,会随机产生节点访问端口

image-20220308160342614

创建kube-ops的namespace

因为我们把Jenkins-Master的pod放到kube-ops下

kubectl create namespace kube-ops
kubectl get ns

image-20220308160547419

构建Jenkins-Master的pod资源

cd jenkins-master
kubectl create -f .

image-20220308155341858

查看pod的状态和调度节点,端口

kubectl get pods -n kube-ops -o wide
kubectl  get service  -n kube-ops

image-20220308165749222

image-20220308165945967

访问jenkins

使用浏览器访问Jenkins地址

访问Jenkins所在节点的 ip:映射的端口

192.168.23.15:32420

image-20220308170917725

获取初始密码。 该初始密码是在 数据卷目录里,存放在initialAdminPassword

image-20220308171442590

image-20220308171535234

image-20220308171543424

image-20220308171547187

设置Jenkins的插件下载地址,下载插件

cd /opt/nfs/jenkins/kube-ops-jenkins-home-jenkins-0-pvc-28d3fcd1-0a47-4da9-b93d-a9a34fa152fa/updates/

sed -i 's/http:\/\/updates.jenkins- ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

image-20220308171742440

Manage Plugins点击Advanced,把Update Site改为国内插件下载地址

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

image-20220308171955249

重启Jenkins

image-20220308172042172

先安装基本插件

Localization:Chinese

Git

Pipeline

Extended Choice Parameter

安装完毕后,重启Jenkins

image-20220308172315664

image-20220308172409252

image-20220308172632334

image-20220308173212645

jenins 与kubernetes整合

安装kubernetes插件

系统管理--->插件管理-->可选插件-->kubernetes

image-20220309151737773

实现Jenkins与Kubernetes整合

系统管理--->系统配置--->云--->新建云--->kubernetes

image-20220309151921783

image-20220309152008310

配置集群信息

kubernetes 地址采用了kube的服务器发现:https://kubernetes.default.svc.cluster.local

namespace 填写 kube-ops ,我们的服务都是放在这个自建的命名空间中

然后点Test Connection ,进行测试连接

Jenkins URL地址:http://jenkins.kube-ops.svc.cluster.local:8080 ,其中8080端口来自于Service.yaml文件定义

192.168.23.16_32420_configureClouds_

构建Jenkins-Slave 自定义镜像

Jenkins-Master在构建Job的时候,Kubernetes会创建Jenkins-Slave的Pod来完成Job的构建。我们选择 运行Jenkins-Slave的镜像为官方推荐镜像:jenkins/jnlp-slave:latest,但是这个镜像里面并没有Maven 环境,为了方便使用,我们需要自定义一个新的镜像:

将maven包,settings配置文件, Dockerfile文件 复制到master主机上

链接:https://pan.baidu.com/s/1EZ0yopDHMoaw5UHXbM1qmg?pwd=uyw2
提取码:uyw2

ls jenkins-slave.zip
unzip jenkins-slave.zip
cd jenkins-slave/

image-20220309154503776

Dockerfile文件内容如下:

#以官方镜像为基础
FROM jenkins/jnlp-slave:latest

MAINTAINER itcast

# 切换到 root 账户进行操作
USER root

# 安装 maven
COPY apache-maven-3.6.2-bin.tar.gz .

RUN tar -zxf apache-maven-3.6.2-bin.tar.gz && \
    mv apache-maven-3.6.2 /usr/local && \
    rm -f apache-maven-3.6.2-bin.tar.gz && \
    ln -s /usr/local/apache-maven-3.6.2/bin/mvn /usr/bin/mvn && \
    ln -s /usr/local/apache-maven-3.6.2 /usr/local/apache-maven && \
    mkdir -p /usr/local/apache-maven/repo

COPY settings.xml /usr/local/apache-maven/conf/settings.xml

USER jenkins

构建镜像,并上传到镜像仓库

docker build -t jenkins-slave-maven:latest .

image-20220309154924963

image-20220309154957729

构建成功后,生成了新的镜像jenkins-slave-maven:latest

docker images

image-20220309155021657

将镜像打标签,上传到仓库的library项目中

#要先配置登记镜像仓库地址(注意要重启docker)
cat /etc/docker/daemon.json

#在mster主机上先登录仓库,要以管理员登录
docker login -u admin -p Harbor12345 192.168.23.13:85

#对镜像打标签   仓库地址/项目名/镜像名:标签
docker tag jenkins-slave-maven:latest 192.168.23.13:85/library/jenkins-slave-maven:latest

#推送到镜像仓库
docker push  192.168.23.13:85/library/jenkins-slave-maven

image-20220309155446880

image-20220309155939577

image-20220309155948705

推送成功后,去镜像仓库的library项目查看

image-20220309160408779

测试Jenkins-Slave是否可以创建

添加凭证

使用用户名密码的方式,添加gitlab的凭证

image-20220309160952445

创建新的Jenkins流水线项目

image-20220309161334131

Pipeline:

image-20220309164228994

def git_address = "http://192.168.23.10:82/my_group/tensquare_back.git"
def git_auth = "9972329a-8a9c-4504-83bd-1ed89556f824"

//创建一个Pod的模板,label为jenkins-slave
podTemplate(label: 'jenkins-slave', cloud: 'kubernetes', containers: [ 
    containerTemplate(
        name: 'jnlp',
        image: "192.168.23.13:85/library/jenkins-slave-maven:latest"
    )
  ]
)
{
    //引用jenkins-slave的pod模块来构建Jenkins-Slave的pod 
    node("jenkins-slave"){
        stage('拉取代码'){
            checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
        }
    }
}

新开一个Jenkins窗口,进入到节点管理。

image-20220309164329896

然后,在另一个窗口点击构建。刷新节点管理窗口,观察变化

可以看到,在构架期间,Jenkins新开了个接节点,使用该新节点构建项目。构建完毕后,该节点被删除

image-20220309164506875

image-20220309164459918

在项目的输出信息上,也可以看到创建了slave节点

image-20220309164740932

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值