00:文章简介
介绍基于Jenkins的GITOPS中的 Jenkins与k8s集成。
01:添加Cloud
安装kubernetes、kubernetes cli插件
1.1:创建k8s认证凭据
如果是运行在k8s上的jenkins,这一步可以省略
查看apiserver地址
root@master01:~# kubectl cluster-info
Kubernetes control plane is running at https://192.168.31.10:6443
创建sa
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins-gitops
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: jenkins-gitops-admin
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: jenkins-gitops
namespace: default
设置kubectl config
# 获取token
TOKEN=$(kubectl get secret $(kubectl get secret | awk '/^sa_name/{print $1}') -o jsonpath={.data.token} | base64 -d)
# 设置集群
kubectl config set-cluster cluster_name --server=https://1.2.3.4 --kubeconfig=/PATH/TO/FILE
# 设置token
kubectl config set-credentials sa_name --token=$TOKEN --kubeconfig=/PATH/TO/FILE
# 设置context
kubectl config set-context sa_name@cluster_name --cluster=cluster_name --user=sa_name --kubeconfig=/PATH/TO/FILE
# 使用设置的context
kubectl config use-context sa_name@cluster_name --kubeconfig=/PATH/TO/FILE
导出为文本文件
kubectl config view --kubeconfig=/PATH/TO/FILE --raw > k8s-config-admin
创建完成后,导出为config文件,并添加到jenkins的凭据里
1.2:连接k8s节点测试
Dashboard -> 节点列表 -> Configure Clouds
测试连接
1.3:配置Jenkins-server信息
需要在Jenkins中将端口配置为50000,配置完需要重启Jenkins才能立即生效
1.4:配置slave-pod标签
1.5:配置slave-pod模板
默认会使用jenkins/inbound-agent镜像作为slave-pod的基础容器,接下来添加的容器会当作第二、第三容器试用。
1.6:测试运行
02:maven和docker集成
对于java应用,我们需要使用maven进行构建,要部署在k8s上,需要打包为docker镜像。
2.1:新增一个slave-pod模板
没说明的代表默认配置即可
配置共享缓存
2.2:配置maven缓存存放pvc
nfs
root@gitlab:/data# showmount -e
Export list for gitlab:
/data/maven_cache 192.168.31.0/24
pv和pvc
apiVersion: v1
kind: PersistentVolume
metadata:
name: maven-cache-pv
labels:
name: maven-cache-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 20G
nfs:
path: /data/maven_cache/
server: gitlab.linux98.com
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: maven-cache-pvc
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20G
selector:
matchLabels:
name: maven-cache-pv
2.3:测试maven模板
pipeline {
agent {
kubernetes {
inheritFrom 'maven-3.6'
}
}
stages {
stage('Build...') {
steps {
container('maven'){
sh 'mvn -version'
}
}
}
}
}
测试结果
2.4:在maven中提供docker环境
在pod中构建docker镜像,需要以 docker in docker的方式进行,使用容器中的docker命令要能访问宿主机上的docker环境。
提前安装Jenkins上的docker pipeline插件
挂载宿主机docker.sock文件
2.5:测试docker环境
pipeline {
agent {
kubernetes {
inheritFrom 'maven-and-docker'
}
}
stages {
stage('Build...') {
steps {
container('maven'){
sh 'mvn -version'
}
}
}
stage('Build.docker..') {
steps {
container('docker'){
sh 'docker info'
}
}
}
}
}
评论区