前言

本次记录物理机部署Jenkins,k8s弹性伸缩agent节点供部署项目。

安装 K8S 插件

登录 Jenkins,系统管理→ 插件管理 → 搜索 kubernetes,选择第二个 Kubernetes,点击 安装,安装完成后重启 Jenkins 。

申请 K8S 凭据

因为 Jenkins 服务器在 kubernetes 集群之外,所以我们准备以下文件才能从外面连接到 kubernetes 集群。

登录 Jenkins,系统管理→ 证书管理 → 全局凭据→添加凭据

配置云kubernetes连接K8S集群的验证文件

kubectl config view --raw -o json

把获取到的数据,分别生成ca.crt client.crt client.key

echo "LS0tLS1CRUdJTiBDRVJUSUZJVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1EZ3lNekEzTXpnd05WaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS09JClJOMmpweXJLK2M1ZktoMVpWbE1KdVppUXEzMFNVRzU5dU51SEJxaUJKVnZzd0syWFhxNXZZOUc1KzEzUTJ2TisKYTIrTm4wcDlDT0xtSitJZVd1V3VMQXZUdUx4RlRPZEd0MUJsQ3FGSkR5RGd2S3hUaHUwVHVCdEp1eUpuNDVBRgpLSTk2UysrRjRpSWU2aW1VSzgydXM3WUdBNjVOSkJFUnlZN1hTQVMyTWlJbUJDSnFmYkVlbVFTRDJXcm1iYlhsCk1Cdmd6VUFGUUdvbUFOYTNmQklQM2QvWWxGZTZqNlJDTmhUSGhqak1BUGk3WUpwcEpzTjZCTDBWYVQ3MTVEYVoKTVI3blo2cVdmMk5RS3k2bGV3MjZxUERzaVFWaCtZS1NxVDdzaWVXSm11a0F3UEpoY2lJL2tGUmd0eXYxSGozWAp4WVNQU2RsOURoUXp0WGVFckljQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZDN2xFcldSQ3QxVUtqWFAxMENpN2pacVpOcEJNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBR3cwR01hcWY5MUlZYjJ4NDVqYgpueVZ6ZkZDSWZuTnA4R1JBbmFCUFpWVFM0ZGJnQ0dUTHZvN3pWUWtDendwMGJaeC9nT0t5ek5hakw0bU5MOEw2CjIxdnYxRzVzV29TTTFDbDh6clM1NVNKTjZwWnlnYUgzSkNFTlB3cDlIb0xEQjdka3gzS2dOZjJQWGJRM1ZRQjQKZ3dWTVFTbmhMRCtLV3hPV3phYjRDdnMra2tEVm81aEY5cVRuTitxY1hKM3A5UG1YaEkvQjVhd2UxME5PUTdDcwpyTzVUYzJKS1dhZUV2ZGx0MmZ6dEQ3Lyt5UlNLRWxML3AzczFtUVlCTkllMWh1anFnS3hVamFKZE40UmJwUk9wCk9pVmVGMmhmVVNycUNtQldhSjY5b2p0cEhUSUtY1MFAKUE5jPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" |base64 -d > ca.crt

echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTlaUmw0bytSZnZBMUNmWUwKbTU1R3hmMFpnYWoySnc4b1hsWUVVU2VJcC82VU14SS9XUXhNWTVxNFFXcUdXYVNDZXV3cHhqTFU2MXlkcmVOcApjeFM4TUpIQXJ6QXJ1cGhhb1FiZkdqdkNHRldHMEtPcUlNcGhMemtiTmRJSTNBOThjV1kwWTBRcnNQaEtHaFVQCmd3ejJYWFhQWFFLSVlLSWN1cGRnbWJKeUpPakpEU01ZQUJJQjZqU3VabkFQeTVaTzNJMTBwT0JNSXJKTVhCY3EKYk1LZDNKRkl5Tm5jNFdpckd2cks2Q2xWUXJYUzY5bDd0c2lVWDhvekZLdEd2ZVllSTA0SmpJWWdQOG5CdnJ2dApMSGpibksrM1pTNUVmV0pQQmtZc0VxK3RtODBtcDRkSzhpVkFZbUVEeVZnS2JoWVZYckpjemcyN3lnZEY1Y3dzCllzU1dUUUlEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JRdTVSSzFrUXJkVkNvMXo5ZEFvdTQyYW1UYQpRVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBSmNwRUlNc0FGT2tzOXdvVzliNmVSc2lyNkpKRFRKMGhTeFp6ClR0Q2RxdGRZT252ZG82RVRQVVlkMkQxU0dJbHcxQ3JLSHF1OEREb0F4K1RqRjhoYjlobkpNTzZsWUlsWFNtM3YKcDcrd0RSTncyZlRjS2pxWStHSWZxRE9WQUlqREFyaWJFVmprK2pkRW8vU3hBOWc4YjJySzRtZTV0Z1JrSFZuQwozNUZodG1JUkhlbnJNMEV5c3JibDFOdGdTdktQLzJ4a0EwaGp5ckNib1puWjhOVk1RTXk5ZURMRmhjMDNqb0tLCmNKSFdNVzdEZVpGVlBLZGdqYXVMUStObkQwUTVkOUdGK1p3cHNtMTVDd1RRZzVUQSt5cW9CNE0vbTJzelRuRXIKNjlNUG5WckxNdmJGVlNDQjJybTYmZiSHJhZWhKNkFMV3BPRDllNHZWN0E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" |base64 -d > client.crt

echo "LS0tLS1CRUdJTiBSU9RYmZHanZDR0ZXRzBLT3EKSU1waEx6a2JOZejRSSFpyMUEKS2NnSW95VWsvUEFnVm8xQVA1Rm1mcHl3SGNNT3JXYktRT25JbG5FbWFLRWZNSGo0eVRSOGlJdUpNcUV0a0NiYwpyclZyUVdVR2VIY1FaaERkdkE0cWtFNXJVNlo1aXBaYjBoaXUvTTBRUGlkR1VGbkVBTlZLdzgrbGJCYjV6a3BwCnpOQW1YYnAvc0Nha29VZ1kzWjB6cDNueEZ0eWpPbXFJdlZlaGlVRStvMlBxaytyVmFaN0g0THlKWlY1RUZoTWMKeEhKTFVGMENnWUVBK1pybWdaZEJib0twKzBlS0g4SFlyRmtKZmU5bS9heU9KUmh0TFR0NjJtaitlaTRTS09IMgp3ekdySmoreEtaeGkwNGs0eGZDNG81VEI2YUhvZDFNS0lRbWRabTgvWE1kOEUxNVUweE4rZkF0S0diL09rd1ExCmx2Z3RvWHpDTVpaTUkyeXUwTnc4OWhCOXR0STNjcDlOTU1yb1dNMTVqRFdoZ0s5enMwaE85bThDZ1lFQSs5OFkKajhjNHJrNjZnd0RjY3Q0dmZGaUU4VjdwdlF0MDJUd0xFZGw4YkM0OXRNY3pTYjAzR0xuL0UzanFlWkJJTlpOTQpacG1oVHhFNFMxejZwaC80VXp2VUVBMVRFdTcrS0xEelF3TlRTWXJmdkpYYXc5eXZOeVRNUGM4L3ZsVWZSV1BGCllKbW9WU0toN1UxYVNhY1BFQTB5TVVIS3pZcW93SFo0VTRwMC9RTUNnWUVBbWlwQVFMNUpYWlk2b3NiMjJ0S0IKbjBHSENVOTZUeWZxeTZLZ25CVm10Y3V2a1lzdkVDMHdtakx0UUx5S0VlZFRhdEFRVHNGMWFTT1IrVmxWR1k0aQpiWEZnMUVuVjJ0b2pHbHRqRE5PM2hhbjdaSmdCWVBCeW9RSThQTWV2c2F6ZzdlaE11UmV1VjFTc01PVDU5a1BLCkMxN256eUZwOTEyUW1NakZMM0J6eE9VQ2dZRUFuT3ZuQXBVTmRGUHFrZm4wWHNDYzl5eXpUeXBpRi96T1JSWEsKazhsYllvOEF0T095eVl0UWkyQStVbVJ3T1dLeUNtY0dINW94elBBZWtaMlJML1VWSk1idnhMVmpIWHF2VFJHblg2WnRBQ0FsRHptczVXYVpGblViVnNjdTRqSFVXYTRBMXZwWnZvPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=" |base64 -d > client.key

生成client P12认证文件cert.pfx,用于配置Jenkins连接k8s集群的认证凭据

生成Client P12认证文件cert.pfx,并下载至本地:

openssl pkcs12 -export -out ./cert.pfx -inkey ./client.key -in ./client.crt -certfile ./ca.crt
Enter Export Password:123456
Verifying - Enter Export Password:123456

上传cert.pfx到Jenkins页面,输入刚才设置的密码。

配置 K8S 集群的对接

登录 Jenkins,点击 系统管理 → 系统配置 → Manager Nodes and Clouds

填写以下内容

  • Kubernetes 地址:kubernetes服务地址,也就是 apiserver 的地址,一般是master 节点 NodeIP+6443 端口

  • Kubernetes 服务证书 key:刚才生成的ca.crt 文件的内容

  • 凭据:刚才创建的 certificate 凭据

  • Jenkins 地址:Agent 连接 Jenkins Master 的地址

启用50000代理端口

创建一个pipeline脚本构建项目

定义参数

def label = "jenkinsagent-${JOB_NAME}-${BUILD_NUMBER}"
def GIT_ADDR = "http://git地址/special_provider.git"

定义选项参数和动态选项参数

properties([
[$class: 'RebuildSettings', autoRebuild: false, rebuildDisabled: false],
buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '6')),
parameters([
choice(choices: ['uat','prod'], description: '选择命名空间', name: 'NAMESPACE'),
choice(choices: ['sp-oms-webapi','sp-provider','sp-webapi'], description: '选择发布项目', name: 'project'),
[
$class: 'CascadeChoiceParameter',
choiceType: 'PT_RADIO',
filterLength: 1,
filterable: false,
name: 'POMDIR',
description: '选择项目目录',
randomName: 'choice-parameter-9129716595374480',
referencedParameters: 'project',
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [ ],
sandbox: false,
script: 'return["ERROR"]'
],
script: [
classpath: [ ],
sandbox: false,
script: '''\
if(project.equals("sp-oms-webapi")){
return ["sp-oms-webapi:selected"]
}else if(project.equals("sp-provider")){
return ["sp-rpc-provider:selected"]
}else if(project.equals("sp-webapi")){
return ["sp-webapi:selected"]
}
'''
]
]
]
])
])

配置Jenkins的pod模板

podTemplate(
label: label, cloud: 'kubernetes',
containers:[
containerTemplate(name: 'jnlp', image: 'hubar地址/jenkins-slave-maven:v1',ttyEnabled:true)
],
volumes:[
hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
hostPathVolume(mountPath: '/etc/localtime', hostPath: '/etc/localtime'),
hostPathVolume(mountPath: '/usr/bin/docker',hostPath: '/usr/bin/docker'),
hostPathVolume(mountPath: '/usr/bin/kubectl',hostPath: '/usr/bin/kubectl'),
nfsVolume(mountPath: '/maven/LocalStore',serverAddress: '10.0.2.85',serverPath: '/maven/LocalStore', readOnly: false),
]
)

执行拉代码、编译、部署

{
node(label) {
stage('checkout'){
checkout([$class: 'GitSCM',
branches: [[name: 'release']],
doGenerateSubmoduleConfigurations: false,
extensions: [],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'ee2e4a25-0f67-4b1a-99e6-98749064f85c', url: "${GIT_ADDR}"]]
])
} stage('complie'){
ansiColor('xterm') {
echo "\u001B[34m 执行mvn编译 \u001B[0m"
}
container('jnlp'){
def build_version = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
sh label: '', script: "mvn -q -B -f ${POMDIR}/pom.xml -DskipTests=true clean install -Daliyun=central -P$NAMESPACE docker:build -Dbuild_version=release-$build_version -Dbuild_tag=$BUILD_TAG"
}
} stage('deploy'){
container('jnlp'){
withKubeConfig(caCertificate: '', clusterName: '', contextName: '', credentialsId: 'db6edcf0-d9a4-4b9b-b92e-898e64665ed3', namespace: '$NAMESPACE', serverUrl: 'https://kubernetes.default.svc.cluster.local') {
sh label: '', script: "kubectl apply -f ${POMDIR}/target/docker/k8s/deployment.yml"
}
}
script{
buildName "#${BUILD_NUMBER}-${BUILD_USER}"
buildDescription "选择项目:${project} 环境:${NAMESPACE}"
}
}
}
}

物理机Jenkins接入K8s环境的更多相关文章

  1. 使用VMware Converter Standalone P2V(物理机转换虚拟机)

    使用VMware Converter Standalone P2V(物理机转换虚拟机) 环境说明: 1.P2V软件:VMware-converter-en-6.3.0-20575345  下载地址:v ...

  2. hadoop进阶----hadoop经验(一)-----生产环境hadoop部署在超大内存服务器的虚拟机集群上vs几个内存较小的物理机

    生产环境 hadoop部署在超大内存服务器的虚拟机集群上 好 还是  几个内存较小的物理机上好? 虚拟机集群优点 虚拟化会带来一些其他方面的功能. 资源隔离.有些集群是专用的,比如给你三台设备只跑一个 ...

  3. wecenter 问答社区 dockerfile,不用纠结于物理机的运行环境

    FROM webdevops/php-nginx:centos-7-php56 ADD . /app RUN ["chmod", "777", "/a ...

  4. Jenkins指定tag发布到k8s环境

    Jenkins指定tag发布到k8s环境 1.Jenkins配置一个Pipeline 工程 首先要安装插件:https://www.cnblogs.com/Dev0ps/p/9125232.html ...

  5. Docker & k8s 系列二:本机k8s环境搭建

    本篇将会讲解k8s是什么?本机k8s环境搭建,部署一个pod并演示几个kubectl命令,k8s dashboard安装. k8s是什么 k8s是kubernetes的简写,它是一个全新的基于容器技术 ...

  6. K8S环境的Jenkin性能问题处理

    环境信息 在K8S环境通过helm部署了Jenkins(namespace为helm-jenkins),用于日常Java项目构建: kubernetes:1.15 jenkins:2.190.2 he ...

  7. K8S环境的Jenkin性能问题处理续篇(任务Pod设置)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos K8S环境的Jenkin性能问题处理 本文是<K ...

  8. K8S(08)交付实战-交付jenkins到k8s集群

    k8s交付实战-交付jenkins到k8s集群 目录 k8s交付实战-交付jenkins到k8s集群 1 准备jenkins镜像 1.1 下载官方镜像 1.2 修改官方镜像 1.2.1 创建目录 1. ...

  9. Jenkins 基础篇 - 环境准备

    前期准备 为了开发这套课程,我专门购买了一台二手戴尔服务器 Dell R720,同时把废弃多年的笔记本电脑也利用了起来.当然如果自己没有多余的电脑,也可以在自己电脑上安装 Vmware Worksta ...

  10. 物理机异常断电,linux虚拟机系统磁盘mount失败,导致无法启动; kubectl 连接失败

    虚拟机 CentOS 7 挂载文件系统失败 上周五下班前没有关闭虚拟机和物理机, 今天周一开了虚拟机之后,发现操作系统启动失败. 原因跟 这篇文章描述的一模一样. 解决操作系统的文件系统挂载的问题之后 ...

随机推荐

  1. ElasticSearch接口

    DSL语法 DSL为ES过滤数据时的语法,可用于查询.删除等操作 基本构成 默认分页查询,size默认为10.ES查询默认最大文档数量限制为10000,可通过 index.max_result_win ...

  2. Cesium中3DTiles使用CustomShader着色器渲染

    加载模型 新版本cesium加载3DTiles代码如下,后续效果只修改CustomShader内内容 //加载楼栋白膜 let tileset try { tileset = await Cesium ...

  3. 基于wvp-GB28181-pro 与 ZLMediaKit 的国标服务器

    官方教程 wvp-GB28181-pro 与 ZLMediaKit 的联调手册 wvp-GB28181-pro wiki ZLMediaKit 基于C++11的高性能运营级流媒体服务框架 地址:Git ...

  4. Kubernetes 深入学习

    目录 一.简介 1.Kubernetes 是什么 2.Kubernetes 特性 二.集群架构与组件 1.Master 2.Node 三.核心概念 四.集群搭建 -- 平台规划 1.生产环境 K8S ...

  5. Java怎样实现将数据导出为Word文档

    文章首发于我的博客:Java怎样实现将数据导出为Word文档 - Liu Zijian's Blog 我们在开发一些系统的时候,例如OA系统,经常能遇到将审批单数据导出为word和excel文档的需求 ...

  6. delphi编写sql脚本文件批量执行程序

    程序使用DelphiXE11.1开发,用到控件UniDac9.1.1,QDAC里面的Qlog组件. 程序实现了SQL脚本文件批处理执行应用,运行效果图. 文件.pas代码 unit main; int ...

  7. java中的HsahMap

    HsahMap HashMap 是 Java 中最常用的集合类之一,它实现了 Map 接口,基于哈希表存储键值对 HashMap的存储是无顺序的 HashMap存储的是键值对(key-value)其中 ...

  8. WEB系统安全之开源软件风险使用评估

    本文分享自天翼云开发者社区<WEB系统安全之开源软件风险使用评估>,作者:Coding 中国信息通信研究院(China Academy of Information and Communi ...

  9. Apache Camel系列(2)----Hello World

    下面创建一个Apache Camel的Hello World程序,该程序使用Maven,Intellij 15,运行环境是JDK 8.   1,创建一个maven工程,在pom.xml文件中添加apa ...

  10. centos7 grub修改

    Centos上的grub文件修改 某一次卸载了swap分区重新设置新的swap分区后系统启动不了了 临时解决办法: reboot 重启服务器 进入grub引导界面 按e编辑 删掉rd.lvm.lv=c ...