jenkins+k8s"/>
jenkins+k8s
说明
该文章是使用Jenkins的Kubernetes插件对现有的k8s集群进行编排
前期准备
- k8s集群环境
- Jenkins服务
Jenkins安装插件并进行配置
1: 安装 Kubernetes 插件
系统管理 -> 插件管理 -> 可选插件 搜索 kubernetes
插件相关信息:
2:添加k8s凭证
系统管理 -> Mange Credentials
添加凭证:需要pfx证书,也就是 k8s-master 节点上的\root\.kube\config
文件里面的内容
生成pfx证书步骤:
-
把config文件内的key为:certificate-authority-data内容拷贝的certificate-authority-data文件然后生成ca.crt文件
cat certificate-authority-data | base64 -d > ca.crt
-
把config文件内的key为:client-certificate-data 内容拷贝的client-certificate-data 文件然后生成client.crt文件
cat client-certificate-data | base64 -d > client.crt
-
把config文件内的key为:client-key-data 内容拷贝的client-key-data 文件然后生成client.key文件
cat client-certificate-data | base64 -d > client.crt
-
生成pfx证书 [需要输入密码]
openssl pkcs12 -export -out cert.pfx -inkey client.key -in client.crt -certfile ca.crt
-
Jenkins添加该凭证
3:配置 Clouds
系统管理 -> 节点管理 -> Configure Clouds
添加完内容可以测试是否连接成功
4:模板配置
-
pod配置
-
相关容器配置 这里使用他们的配置也可以,我觉得添麻烦直接把yaml文件的内容粘贴进去了,效果一样
这里是使用的自己做的镜像也可以使用官网提供的镜像详见:
apiVersion: v1
kind: Pod
spec:containers:- name: jnlpworkingDir: C:\\Users\\docker\\Documents\\workspace\\build-v2\\common\\hr_sysdiag-app-50image: 192.168.3.227:8090/win_build/hr_agent_build:v1nodeSelector:kubernetes.io/os: windowshostAliases:- ip: "192.168.1.52"hostnames:- "dev.huorong"dnsPolicy: NonednsConfig:nameservers: [ "114.114.114.114" ]searches:- default.svc.cluster.local- svc.cluster.local- cluster.localoptions:- name: ndotsvalue: "5"
5:测试
创建流水线任务
pipeline{agent{node {label 'build-tool'}}stages{stage('Deploy to Kubernetes'){steps{script{powershell 'ping www.baidu'}}}}
}
window编译模板相关配置
模板名称:window-build-pod
命名空间: default #也可以用其他的命名空间
标签列表:window-build-pod #最好跟模板名称一直, pod为特殊字符,因为编译那边的groovy代码中是根据这个pod判断是否把项目拷贝到容器中
yaml 内容配置
apiVersion: v1
kind: Pod
spec:containers:- name: jnlpimage: 192.168.3.227:8090/win_build/hr-jenkins-agent:basevolumeMounts:- mountPath: C:\dataname: build-volumenodeSelector:kubernetes.io/os: windowsvolumes:- name: build-volumehostPath:path: C:\datatype: DirectoryhostAliases:- ip: "192.168.1.52"hostnames:- "dev.huorong"- ip: "192.168.1.200"hostnames:- "pub.huorong"- "git.huorong"- ip: "192.168.1.71"hostnames:- "gitlab.huorong"dnsPolicy: NonednsConfig:nameservers: [ "114.114.114.114" ]searches:- default.svc.cluster.local- svc.cluster.local- cluster.localoptions:- name: ndotsvalue: "5"
相关说明:
containers:容器的相关配置name: jnlp #必须使用 “jnlp” 使用该名称是要覆盖原有的配置image:192.168.3.227:8090/win_build/hr-jenkins-agent:base #该镜像是自己根据window的jnlp镜像做的一个适合自己业务的镜像内部有vs2019编译工具volumeMounts:#挂载相关配置 主要是把宿主机上的app源码映射到容器中,方便把代码拷贝到代理的目录中- name: build-volumehostPath:path: C:\datatype: Directory
相关问题处理
问题描述:当启动的pod的下拉git代码并更新相关子模块时老是卡住,当时jnlp镜像里面的git版本是2.26,是git版本比较低导致的。
解决方式有两种:
1:换一个jnlp高版本的镜像
2:配置Jenkins全局git工具
注:需要安装git client 插件 ,然后再全局工具配置上配置git 工具
压缩包的地址:.38.0.windows.1/MinGit-2.38.0-64-bit.zip 可以使用github上的发布版,也可以把zip文件放到自己的服务器,使用github的话不稳定
git将安装在tools\git\mingw64
中的每个代理上 git可执行文件的路径是tools\git\mingw64\bin\git.exe
。
参考文档: /
3: GITSCM配置
注: GITSCM的gitTool一定要配置,与上一步的git可执行文件的路径一致:tools\git\mingw64\bin\git.exe
pipeline{agent{node {label 'w-build-pod'}}parameters {string(name: 'GIT_REPO', trim: true)}stages{stage('Deploy to Kubernetes'){steps{script{dir(GIT_REPO){// 代理中含有 pod 则说明该代理是从k8s中进行编排运行的,需要把对应的项目从挂载盘中copy到代理的工作目录中def projectName = GIT_REPObat "xcopy C:\\data\\$projectName\\* .\\ /Y /E /H "//tool.checkout(config['git'], params.GIT_BRANCH_OR_TAG, params.GIT_CREDENTIALS)checkout (changelog:true,scm: [$class: 'GitSCM',branches: [[name: "rc5.0.71.0"]],doGenerateSubmoduleConfigurations: false,extensions: [[$class: 'SubmoduleOption',disableSubmodules: false,recursiveSubmodules: true,trackingSubmodules: false,reference: '',timeout: 10,parentCredentials: true]],userRemoteConfigs: [[credentialsId: "compiler",url: "git@gitlab.huorong:hr50/hr_sysdiag-app-50.git"]],gitTool: "tools\\git\\mingw64\\bin\\git.exe"])}}}}//检测当前git提交版本是否编译过,编译过就不重复编译stage('CheckTag') {steps {script {echo "checkout 完成"//powershell 'sleep 99999'}}}}
}
更多推荐
jenkins+k8s
发布评论