[k8s]jenkins配合kubernetes插件实现k8s集群构建的持续集成
另一个结合harbor自动构建镜像的思路: 即code+baseimage一体的方案
- 程序员将代码提交到代码仓库gitlab
- 钩子触发jenkins master启动一次构建
- jenkins master从k8s申请一个jenkins slave编译容器
- 在容器内编译完成以后,获得最终产物
- 将最终产物通过dockerfile生成生产部署镜像(这里省略了测试,其实部署镜像需要测试通过)
- 将生产镜像推送到harbor镜像仓库
- jenkins slave生命周期结束,k8s销毁slave容器
- 一次构建完成
k8s持续集成的一个思路:
这里要说的是部署部分
注: 这只是一个持续集成思想.本篇按照这个思想来搞,在我的环境里我为了速度快当然还有别的因素我用这种方案,用的很6.
其他思路:
- 可以将code+image打在一起做升级
- 可以rbac+环境+ns+supervisor 每个开发一个环境这样搞
后面我抽空一一实现下.
这篇文章思路:
手动构建war包(集成测试)-->本地tomcat测试通过(功能测试)-->k8s容器化tomcat(pv+deploy+svc+ingress)-->将war包拖入k8s的tomcat测试.
jenkins jnlp镜像构建(mvn+git+kubectl)-> jnlp镜像测试,确保可被server动态调度-->配置war包的pipeline测试.
注: 本篇jenkins server部署在vm上,非docker部署,jenkins-jnlp-slave是容器化自动创建的.
其他内容参考: 容器ci索引: http://www.cnblogs.com/iiiiher/p/8026689.html
构建jnlp镜像的dockerfile
- 准备dockerfile所需文件
git clone https://github.com/jenkinsci/docker-jnlp-slave.git
cd docker-jnlp-slave$ ls
Dockerfile jenkins-slave kubectl README.md
构建mvn3.5.2+git+kubectl的镜像
基于jenkinsci/slave:alpine的基础镜像
参考: https://github.com/jenkinsci/docker-slave/blob/master/Dockerfile
https://github.com/jenkinsci/docker-jnlp-slave/blob/master/Dockerfile
https://hub.docker.com/r/jenkinsci/slave/tags/
alpine-git安装参考:
https://hub.docker.com/r/alpine/git/~/dockerfile/
$ cat Dockerfile
FROM jenkinsci/slave:alpineUSER root
RUN apk add --no-cache curl tar bash## Install Maven
ARG MAVEN_VERSION=3.5.2
ARG USER_HOME_DIR="/root"
ARG SHA=707b1f6e390a65bde4af4cdaf2a24d45fc19a6ded00fff02e91626e3e42ceaff
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binariesRUN mkdir -p /usr/share/maven /usr/share/maven/ref \&& curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \&& echo "${SHA} /tmp/apache-maven.tar.gz" | sha256sum -c - \&& tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \&& rm -f /tmp/apache-maven.tar.gz \&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn \&& apk --update add git openssh \&& rm -rf /var/lib/apt/lists/* \&& rm /var/cache/apk/* \&& mkdir /src /target \&& chown jenkins.jenkins /src /targetENV MAVEN_HOME /usr/share/maven
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"# install kubectl
COPY kubectl /usr/local/bin/kubectl## install jenkins-slave
COPY jenkins-slave /usr/local/bin/jenkins-slave
USER jenkins
WORKDIR /home/jenkins
ENTRYPOINT ["jenkins-slave"]
镜像已可以从dockerhub下载:
docker pull lanny/mvn-git-kubectl-jnlp:3.5.2
测试jnlp镜像
主要看他能否用jenkins-server动态调用跑起来
当然首先安装jenkins kubernetes插件,新建一朵云:
参考: http://www.cnblogs.com/iiiiher/p/7979336.html
配置项目: 选择pipeline script
podTemplate(name: 'maotai-dev', cloud: 'kubernetes',namespace: 'kube-public', label: 'maotai-dev',serviceAccount: 'default', containers: [containerTemplate(name: 'jnlp',image: 'lanny/mvn-git-kubectl-jnlp:3.5.2',args: '${computer.jnlpmac} ${computer.name}',ttyEnabled: true,privileged: false,alwaysPullImage: false)],
) {node('maotai-dev') {stage('git-clone') {container('jnlp') {sh """date +%F;sleep 30;"""}}}
}
点击构建-->显示构建成功
构建成功后jnlp镜像随着构建结束自动删除.
tomcat java-helloworld项目
kubernetes插件的pipeline使用:
参考:
https://github.com/jenkinsci/kubernetes-plugin
https://help.aliyun.com/document_detail/56336.html?spm=5176.doc56336.6.851.wAqCzu
javahelloworld代码: https://github.com/lannyMa/trucks ,构建可形成helloworld的war包.可以部署在tomcat用于测试.
jenkins项目配置: 新建项目 test-pipeline
podTemplate(name: 'maotai-dev', cloud: 'kubernetes',namespace: 'kube-public', label: 'maotai-dev',serviceAccount: 'default', containers: [containerTemplate(name: 'jnlp',image: 'lanny/mvn-git-kubectl-jnlp:3.5.2',args: '${computer.jnlpmac} ${computer.name}',ttyEnabled: true,privileged: false,alwaysPullImage: false)],volumes: [persistentVolumeClaim(mountPath: '/tmp/', claimName: 'spring-pvc')]) {node('maotai-dev') {stage('git-clone') {container('jnlp') {sh """git clone https://github.com/lannyMa/trucks.git"""}}stage('mvn-package') {container('jnlp') {sh """cd trucks && mvn clean package && cp -rpf target/*.war /tmp/"""}}stage('restart') {container('jnlp') {sh """pod_name=`kubectl -s 192.168.x.x:8080 -n kube-public get pods -l name=maotai-dev -o name | cut -d"/" -f2`kubectl -s kube-apiserver-http.kube-public -n kube-public delete pod \$pod_name"""}}}
}
配置tomcat项目
tomcat-pvc.yaml #前提是配置好stroragecalss: 参考: http://www.cnblogs.com/iiiiher/p/7988803.html
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: spring-pvcnamespace: kube-public
spec:storageClassName: "managed-nfs-storage"accessModes:- ReadOnlyManyresources:requests:storage: 100Mi
tomcat-deploy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: springnamespace: kube-public
spec:replicas: 1template:metadata:labels:name: springname: maotai-dev #这里标签设置需注意,因为jenkins配置kubectl的stage时需要根据标签过滤重启它: kubectl -s 192.168.x.x:8080 -n kube-public get pods -l name=spring -o name | cut -d"/" -f2spec:containers:- name: springimage: tomcat:latestimagePullPolicy: IfNotPresentports:- name: webcontainerPort: 8080volumeMounts:- mountPath: /usr/local/tomcat/webappsname: spring-foldervolumes:- name: spring-folderpersistentVolumeClaim:claimName: spring-pvc
执行成功:
k8s集群容器化tomcat项目
- 容器化tomcat项目: 配置k8s集群的tomcat 包含了 pvc+deploy+svc+ingress
- 做法:
- 先手动编译项目,本次tomcat测试通过
- 集成到k8s集群的tomcat,测试,确保项目可以正常运行
tomcat-svc.yaml
apiVersion: v1
kind: Service
metadata:name: springnamespace: kube-publiclabels:name: spring
spec:ports:- name: webport: 8080targetPort: webselector:name: spring
tomcat-ingress.yaml #前提是已配置好了ingress,nginx-ingress配置参考:http://www.cnblogs.com/iiiiher/p/8006801.html
apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: springnamespace: kube-public
spec:rules:- host: spring.maotai.nethttp:paths:- path: /backend:serviceName: springservicePort: web
创建好后确保能够访问:
接下来需要手动编译,确保项目通过集成测试(可成功编译),功能测试(部署tomcat后可访问)
项目代码: https://github.com/lannyMa/trucks.git
mvn配置改源等参考: https://github.com/lannyMa/java-helloword.git
确保没问题后将war包放到上一步创建的pv里.我的是nfs,直接到nfs-server上把war包托上去,然后重启tomcat,测试效果.
转载于:https://www.cnblogs.com/iiiiher/p/8026555.html
[k8s]jenkins配合kubernetes插件实现k8s集群构建的持续集成相关推荐
- k8s和harbor的集成_爱威尔-基于kubernetes集群的项目持续集成(gitlab+harbor+Jenkins)安装...
这个算是基于kubernetes集群的项目持续集成的前导篇,先把这用环境搭建好我们后面就可以专注做基于k8s的docker化项目持续集成了. gitlab安装 https://about.gitlab ...
- jenkins配合docker实现测试环境多分支无等待持续集成实现方案
方案由来: 在分布式时代,多服务部署已是家常便饭,那么在内部测试阶段,多分支并行开发的环境,如何实现多分支且无等待测试便是当务之急.为什么强调"多分支且无等待",jenkins可以 ...
- k8s:概念以及搭建高可用集群
一.k8s概念和架构 1.k8s概述 k8s是谷歌在2014年开源的容器化集群管理系统 使用k8s进行容器化应用部署 使用k8s利于应用扩展 k8s目标实施让容器化应用程序更加简洁高效 2.特性 (1 ...
- 容器编排技术 -- Kubernetes从零开始搭建自定义集群
容器编排技术 -- Kubernetes从零开始搭建自定义集群 1 设计和准备 1.1 学习 1.2 Cloud Provider 1.3 节点 1.4 网络 1.4.1 网络连接 1.4.2 网络策 ...
- 使用Kubeadm搭建Kubernetes(1.12.2)集群
Kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,在2018年将进入GA状态,说明离生产环境中使用的距离越来 ...
- 使用二进制包在生产环境部署 Kubernetes v1.13.2 集群
文章目录 使用二进制包在生产环境部署 Kubernetes v1.13.2 集群 一 背景 二 环境及架构图 2.1 软件环境 2.2 服务器规划 2.3 节点或组件功能简介 2.4 Kubernet ...
- kubespray v2.21.0 在线定制部署升级 kubernetes v1.24.0 集群【2】
文章目录 简介 创建 虚拟机模板 虚拟机名称 配置静态地址 配置代理 yum 配置 配置主机名 安装 git 安装 docker 安装 ansible 配置内核参数 安装 k8s 定制安装 kuber ...
- 容器编排技术 -- Kubernetes 重新配置活动集群中节点的 Kubelet
容器编排技术 -- Kubernetes 重新配置活动集群中节点的 Kubelet 1 Before you begin 2 重新配置集群活动节点上的 Kubelet 2.1 基本工作流程概览 2.2 ...
- Kubernetes搭建Flink会话集群
Kubernetes搭建Flink会话集群 一.准备工作 linux 系统环境 :linux系统采用的是Centos 8 .安装linux软件包管理工具yum 安装docker-ce yum inst ...
最新文章
- Spring Cloud Eureka 自我保护机制
- 重磅合集 | 31 篇技术文章,带你从零入门 K8s (留言赠书)
- 坑爹的去哪儿网订酒店经历
- 第二版全新博客园win phone 客户端
- 减少主要GC暂停的频率
- [js] 一个api接口从请求数据到请求结束共与服务器进行了几次交互?
- pr下雪下雨_图像增强:下雨,下雪。 如何修改照片以训练自动驾驶汽车
- 鸿蒙系统手机现在有什么,华为鸿蒙手机迟迟未来 手机操作系统面临的难点有哪些...
- 认识CSS中高级技巧之元素的显示与隐藏
- 计算机集成项目经理 培训,计算机信息系统集成项目经理培训总结.doc
- python-threading.Event实现事件功能--汽车过红绿灯(转载)
- 28.ldconfig
- 前端学习(二十五)移动端(笔记)
- Performance Engineering of Software Systems (四) ——工具使用
- pythonqt5教程从零开始_pyQt5 QtDesigner 简易入门教程
- 用SVM分类模型处理iris数据集
- 基于鱼群算法的函数寻优算法
- 简单理解时间同步和时钟同步
- android线程池!如何试出一个Android开发者真正的水平?内容太过真实
- 抖音获取douyin分享口令url API 返回值说明
热门文章
- python文件同时读写_python 同时读取多个文件的例子
- ggplot2 多个柱状图比较_15. 再论ggplot2作图的图形元素组成
- vb.net word 自定义工具栏_Word|用这20个技巧办公从此告别龟速工作
- 齐齐哈尔计算机二级,2020齐齐哈尔市计算机二级报名时间|网上报名入口【8月20日9时开通】...
- cmake编译多个文件夹_CMake应用技巧:在一个工程中编译运行多个文件
- python的软件环境是什么意思_python的虚拟环境详解
- python哪些是可变对象_python 中的可变对象与不可变对象
- Win10下VB6.0开发之串口通信基础(一)控件属性篇
- mysql explode函数_hive中,lateral view 与 explode函数
- 递归实现二分搜索(python)