jenkins+k8s
压缩包的地址:https://github.com/git-for-windows/git/releases/download/v2.38.0.windows.1/MinGit-2.38.0-64-bit.zip 可以使用github上的发布版,也可以把zip文件放到自己的服务器,使用github.com的话不稳定。这里是使用的自己做的镜像也可以使用官网提供的镜像详见:https://hub.do
说明
该文章是使用Jenkins的Kubernetes插件对现有的k8s集群进行编排
前期准备
- k8s集群环境
- Jenkins服务
Jenkins安装插件并进行配置
1: 安装 Kubernetes 插件
系统管理 -> 插件管理 -> 可选插件 搜索 kubernetes
插件相关信息:https://plugins.jenkins.io/kubernetes/#plugin-content-windows-support
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文件的内容粘贴进去了,效果一样
这里是使用的自己做的镜像也可以使用官网提供的镜像详见:https://hub.docker.com/r/mirantis/jnlp-slave/tags
apiVersion: v1
kind: Pod
spec:
containers:
- name: jnlp
workingDir: C:\\Users\\docker\\Documents\\workspace\\build-v2\\common\\hr_sysdiag-app-50
image: 192.168.3.227:8090/win_build/hr_agent_build:v1
nodeSelector:
kubernetes.io/os: windows
hostAliases:
- ip: "192.168.1.52"
hostnames:
- "dev.huorong.cn"
dnsPolicy: None
dnsConfig:
nameservers: [ "114.114.114.114" ]
searches:
- default.svc.cluster.local
- svc.cluster.local
- cluster.local
options:
- name: ndots
value: "5"
5:测试
创建流水线任务
pipeline{
agent{
node {
label 'build-tool'
}
}
stages{
stage('Deploy to Kubernetes'){
steps{
script{
powershell 'ping www.baidu.com'
}
}
}
}
}
window编译模板相关配置
模板名称:window-build-pod
命名空间: default #也可以用其他的命名空间
标签列表:window-build-pod #最好跟模板名称一直, pod为特殊字符,因为编译那边的groovy代码中是根据这个pod判断是否把项目拷贝到容器中
yaml 内容配置
apiVersion: v1
kind: Pod
spec:
containers:
- name: jnlp
image: 192.168.3.227:8090/win_build/hr-jenkins-agent:base
volumeMounts:
- mountPath: C:\data
name: build-volume
nodeSelector:
kubernetes.io/os: windows
volumes:
- name: build-volume
hostPath:
path: C:\data
type: Directory
hostAliases:
- ip: "192.168.1.52"
hostnames:
- "dev.huorong.cn"
- ip: "192.168.1.200"
hostnames:
- "pub.huorong.cn"
- "git.huorong.cn"
- ip: "192.168.1.71"
hostnames:
- "gitlab.huorong.cn"
dnsPolicy: None
dnsConfig:
nameservers: [ "114.114.114.114" ]
searches:
- default.svc.cluster.local
- svc.cluster.local
- cluster.local
options:
- name: ndots
value: "5"
相关说明:
containers:容器的相关配置
name: jnlp #必须使用 “jnlp” 使用该名称是要覆盖原有的配置
image:192.168.3.227:8090/win_build/hr-jenkins-agent:base #该镜像是自己根据window的jnlp镜像做的一个适合自己业务的镜像内部有vs2019编译工具
volumeMounts:#挂载相关配置 主要是把宿主机上的app源码映射到容器中,方便把代码拷贝到代理的目录中
- name: build-volume
hostPath:
path: C:\data
type: Directory
相关问题处理
问题描述:当启动的pod的下拉git代码并更新相关子模块时老是卡住,当时jnlp镜像里面的git版本是2.26,是git版本比较低导致的。
解决方式有两种:
1:换一个jnlp高版本的镜像
2:配置Jenkins全局git工具
注:需要安装git client 插件 ,然后再全局工具配置上配置git 工具
压缩包的地址:https://github.com/git-for-windows/git/releases/download/v2.38.0.windows.1/MinGit-2.38.0-64-bit.zip 可以使用github上的发布版,也可以把zip文件放到自己的服务器,使用github.com的话不稳定
git将安装在tools\git\mingw64
中的每个代理上 git可执行文件的路径是tools\git\mingw64\bin\git.exe
。
参考文档: https://plugins.jenkins.io/git-client/
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_REPO
bat "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.cn:hr50/hr_sysdiag-app-50.git"
]],
gitTool: "tools\\git\\mingw64\\bin\\git.exe"
]
)
}
}
}
}
//检测当前git提交版本是否编译过,编译过就不重复编译
stage('CheckTag') {
steps {
script {
echo "checkout 完成"
//powershell 'sleep 99999'
}
}
}
}
}
更多推荐
所有评论(0)