目 录CONTENT

文章目录

Jenkins模拟GitOps系列02- Jenkins与k8s集成

cplinux98
2022-04-04 / 0 评论 / 0 点赞 / 62 阅读 / 710 字 / 正在检测是否收录...

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的凭据里

image-20220404180502718

1.2:连接k8s节点测试

Dashboard -> 节点列表 -> Configure Clouds

测试连接

image-20220404201312700

1.3:配置Jenkins-server信息

image-20220404201403923

需要在Jenkins中将端口配置为50000,配置完需要重启Jenkins才能立即生效

image-20220404215300756

1.4:配置slave-pod标签

image-20220404201542159

1.5:配置slave-pod模板

默认会使用jenkins/inbound-agent镜像作为slave-pod的基础容器,接下来添加的容器会当作第二、第三容器试用。

image-20220404201718038

1.6:测试运行

image-20220404202058136

02:maven和docker集成

对于java应用,我们需要使用maven进行构建,要部署在k8s上,需要打包为docker镜像。

2.1:新增一个slave-pod模板

没说明的代表默认配置即可

image-20220404213734419

配置共享缓存

image-20220404213758451

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'
                }
            }
        }
    }
}

测试结果

image-20220404212126765

2.4:在maven中提供docker环境

在pod中构建docker镜像,需要以 docker in docker的方式进行,使用容器中的docker命令要能访问宿主机上的docker环境。

提前安装Jenkins上的docker pipeline插件

image-20220404213852822

挂载宿主机docker.sock文件

image-20220404213924757

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'
                }
            }
        }
    }
}

image-20220404213556651

0

评论区