另一个结合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集群构建的持续集成相关推荐

  1. k8s和harbor的集成_爱威尔-基于kubernetes集群的项目持续集成(gitlab+harbor+Jenkins)安装...

    这个算是基于kubernetes集群的项目持续集成的前导篇,先把这用环境搭建好我们后面就可以专注做基于k8s的docker化项目持续集成了. gitlab安装 https://about.gitlab ...

  2. jenkins配合docker实现测试环境多分支无等待持续集成实现方案

    方案由来: 在分布式时代,多服务部署已是家常便饭,那么在内部测试阶段,多分支并行开发的环境,如何实现多分支且无等待测试便是当务之急.为什么强调"多分支且无等待",jenkins可以 ...

  3. k8s:概念以及搭建高可用集群

    一.k8s概念和架构 1.k8s概述 k8s是谷歌在2014年开源的容器化集群管理系统 使用k8s进行容器化应用部署 使用k8s利于应用扩展 k8s目标实施让容器化应用程序更加简洁高效 2.特性 (1 ...

  4. 容器编排技术 -- Kubernetes从零开始搭建自定义集群

    容器编排技术 -- Kubernetes从零开始搭建自定义集群 1 设计和准备 1.1 学习 1.2 Cloud Provider 1.3 节点 1.4 网络 1.4.1 网络连接 1.4.2 网络策 ...

  5. 使用Kubeadm搭建Kubernetes(1.12.2)集群

    Kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,在2018年将进入GA状态,说明离生产环境中使用的距离越来 ...

  6. 使用二进制包在生产环境部署 Kubernetes v1.13.2 集群

    文章目录 使用二进制包在生产环境部署 Kubernetes v1.13.2 集群 一 背景 二 环境及架构图 2.1 软件环境 2.2 服务器规划 2.3 节点或组件功能简介 2.4 Kubernet ...

  7. kubespray v2.21.0 在线定制部署升级 kubernetes v1.24.0 集群【2】

    文章目录 简介 创建 虚拟机模板 虚拟机名称 配置静态地址 配置代理 yum 配置 配置主机名 安装 git 安装 docker 安装 ansible 配置内核参数 安装 k8s 定制安装 kuber ...

  8. 容器编排技术 -- Kubernetes 重新配置活动集群中节点的 Kubelet

    容器编排技术 -- Kubernetes 重新配置活动集群中节点的 Kubelet 1 Before you begin 2 重新配置集群活动节点上的 Kubelet 2.1 基本工作流程概览 2.2 ...

  9. Kubernetes搭建Flink会话集群

    Kubernetes搭建Flink会话集群 一.准备工作 linux 系统环境 :linux系统采用的是Centos 8 .安装linux软件包管理工具yum 安装docker-ce yum inst ...

最新文章

  1. Spring Cloud Eureka 自我保护机制
  2. 重磅合集 | 31 篇技术文章,带你从零入门 K8s (留言赠书)
  3. 坑爹的去哪儿网订酒店经历
  4. 第二版全新博客园win phone 客户端
  5. 减少主要GC暂停的频率
  6. [js] 一个api接口从请求数据到请求结束共与服务器进行了几次交互?
  7. pr下雪下雨_图像增强:下雨,下雪。 如何修改照片以训练自动驾驶汽车
  8. 鸿蒙系统手机现在有什么,华为鸿蒙手机迟迟未来 手机操作系统面临的难点有哪些...
  9. 认识CSS中高级技巧之元素的显示与隐藏
  10. 计算机集成项目经理 培训,计算机信息系统集成项目经理培训总结.doc
  11. python-threading.Event实现事件功能--汽车过红绿灯(转载)
  12. 28.ldconfig
  13. 前端学习(二十五)移动端(笔记)
  14. Performance Engineering of Software Systems (四) ——工具使用
  15. pythonqt5教程从零开始_pyQt5 QtDesigner 简易入门教程
  16. 用SVM分类模型处理iris数据集
  17. 基于鱼群算法的函数寻优算法
  18. 简单理解时间同步和时钟同步
  19. android线程池!如何试出一个Android开发者真正的水平?内容太过真实
  20. 抖音获取douyin分享口令url API 返回值说明

热门文章

  1. python文件同时读写_python 同时读取多个文件的例子
  2. ggplot2 多个柱状图比较_15. 再论ggplot2作图的图形元素组成
  3. vb.net word 自定义工具栏_Word|用这20个技巧办公从此告别龟速工作
  4. 齐齐哈尔计算机二级,2020齐齐哈尔市计算机二级报名时间|网上报名入口【8月20日9时开通】...
  5. cmake编译多个文件夹_CMake应用技巧:在一个工程中编译运行多个文件
  6. python的软件环境是什么意思_python的虚拟环境详解
  7. python哪些是可变对象_python 中的可变对象与不可变对象
  8. Win10下VB6.0开发之串口通信基础(一)控件属性篇
  9. mysql explode函数_hive中,lateral view 与 explode函数
  10. 递归实现二分搜索(python)