gitlab+jenkins+harbor+k8s部署微服务-准备工作
Maven作为项目的编译工具。具体安装Maven流程不做阐述,但是需要确保配置好Maven仓库私服以及JDK编译版本
这里只是作为运维侧部署业务,不涉及编译,所以此步骤跳过。
三、
使用Jenkins工具持续集成、持续部署
Jenkins最主要的工作就是将GitLab上可以构建的工程代码拉取并且进行构建,再根据流程可以选择发布到测试环境或是生产环境。
一般是GitLab上的代码经过大量的测试后,确定发行版本,再发布到生产环境。
CI/CD可以理解为:
-
CI过程即是通过Jenkins将代码拉取、构建、制作镜像交给测试人员测试。
-
持续集成:让软件代码可以持续的集成到主干上,并自动构建和测试。
-
-
CD过程即是通过Jenkins将打好标签的发行版本代码拉取、构建、制作镜像交给运维人员部署。
-
持续交付:让经过持续集成的代码可以进行手动部署。
-
持续部署:让可以持续交付的代码随时随地的自动化部署。
-
4.1 Jenkins安装
使用k8s方式安装,也可以使用docker方式安装,docker安装前面有介绍
依次执行kubectl apply -f jenkins-pv.yaml,kubectl apply -f jenkins-pvc.yaml,kubectl apply -f jenkins-deploy.yaml,kubectl apply -f svc.yaml
#持久化存储,pv创建文件
[root@k8s-master1 devops]# cat jenkins-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-pv
labels:
type: sata
namespace: my-ns-devops
spec:
capacity:
storage: 4Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: "/data/k8s/devops" #作为Jenkins的映射路径,这个目录一定要有写权限,否则Jenkins容器启动失败,因为数据写不进去
server: 192.168.198.144
readOnly: false
#pvc创建文件
[root@k8s-master1 devops]# cat jenkins-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: jenkins-pvc
namespace: my-ns-devops
labels:
type: sata
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 4Gi
selector:
matchLabels:
type: sata
#deployment创建文件
[root@k8s-master1 devops]# cat jenkins-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: jenkins
name: jenkins
namespace: my-ns-devops
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
creationTimestamp: null
labels:
app: jenkins
spec:
containers:
- image: jenkins/jenkins:latest
name: jenkins
imagePullPolicy: Never
ports:
- containerPort: 8080 #容器镜像
- containerPort: 50000
volumeMounts: #容器挂载的pvc卷
- name: jenkins-data #自定义容器挂载卷的名称
mountPath: /var/jenkins_home #需要挂载出去的容器的路径,我的html文件放在了apps这个目录下
volumes: #挂载卷
- name: jenkins-data #卷名称,需要和自定义容器挂载卷的名称一致
persistentVolumeClaim:
claimName: jenkins-pvc #本地创建的pvc名称
nodeSelector:
xm: jenkins
#svc服务暴露
[root@k8s-master1 devops]# cat svc.yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
name: jenkins
namespace: my-ns-devops
spec:
ports:
- port: 8080
name: http
targetPort: 8080
nodePort: 31561
- port: 50000
name: agent
nodePort: 30561
targetPort: 50000
selector:
app: jenkins
type: NodePort
status:
loadBalancer: {}
检查安装后的服务:
[root@k8s-master1 devops]# kubectl get all -n my-ns-devops
NAME READY STATUS RESTARTS AGE
pod/jenkins-59bc549859-fkprw 1/1 Running 2 (6m32s ago) 2d23h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/jenkins NodePort 10.107.57.212 <none> 8080:31561/TCP,50000:30561/TCP 10d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/jenkins 1/1 1 1 10d
NAME DESIRED CURRENT READY AGE
replicaset.apps/jenkins-59bc549859 1 1 1 10d
网页登录Jenkins,安装插件。后续的步骤都是一样的。
Jenkins配置:
在插件管理中搜索安装Git Parameter,Publish Over SSH,Pipeline
在全局配置中,配置git路径。使用maven的也需要配置maven路径和jdk路径。maven的使用依赖jdk
后续Jenkins连接Git仓库,需要使用到git插件,否则会提示连接失败
在系统配置中,配置 Publish over SSH,这个服务是将Jenkins服务器从gitlab仓库拉取的代码通过ssh服务推送到指定的部署服务器上
安装了 Publish over SSH插件后,在系统配置中找到 Publish over SSH配置项,配置部署服务器的ip,服务器账号密码和要推送的目录位置
至此,环境准备完成。