基于k8s构建企业jenkinscicd

author author     2023-03-03     271

关键词:

介绍及准备工作

1.概述
  • 持续集成(Continuous Integration,CI):代码合并、构建、部署、测试都在一起,不断地执行这个过程,并对结果反馈。
  • 持续部署(Continuous Deployment,CD):部署到测试环境、预生产环境、生产环境。
  • 持续交付(Continuous Delivery,CD):将最终产品发布到生产环境给用户使用。

基于k8s构建企业jenkins

闭环流程

基于k8s构建企业jenkins

引入k8s

基于k8s构建企业jenkins

部署到k8s平台流程
  • 制作镜像
  • 容器放到pod
  • 控制器管理pod
  • 暴露应用
  • 对外发布应用
  • 日志管理/监控
2.准备工作
部署harbor和git
1、下载安装包
wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.1.tgz
2、解压
tar -zxvf harbor-offline-installer-v1.8.1.tgz
3、编辑配置文件
cd harbor
vim harbor.yaml
hostname = x.x.x.x (ip)
4、准备配置
./prepare
5、导入镜像并启动
./install.sh
6、查看容器状态
docker-compose ps
# 安装docker
1、安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
2、添加源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3、安装
yum install docker-ce -y
4、配置加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
systemctl restart docker
systemctl enable docker
5、安装docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 安装git
1、安装git
yum install git -y
2、创建git用户并设置密码
useradd git
passwd git
3、创建仓库
su - git
mkdir app-git
cd app-git
git --bare init
4、配置客户端与git服务器SSH免密交互
ssh-keygen # 一路回车
ssh-copy-id git@192.168.100.2
5、测试
git clone git@192.168.100.2:/home/
git add .
git commit -m "test"
git push origin master
k8s中部署jenkins

基于k8s构建企业jenkins

# nfs安装及挂载
1、安装nfs
yum install nfs-utils -y
2、设置共享暴露目录
vim /etc/exports
/nfs *(rw,no_root_squash)
3、启动服务
systemctl start nfs
4、客户端挂载
mount -t nfs 192.168.100.2:/nfs /mnt
构建jenkins-slave镜像
  • 构建镜像
Dockerfile:构建jenkins-slave镜像
jenkins-slave:shell脚本(需要加入可执行权限 chmod +x jenkins-slave),在镜像构建时需要用到。
slave.jar: 启动脚本

# Dockerfile
FROM ubuntu
ENV JAVA_HOME /usr/local/jdk
ENV MAVEN_HOME /usr/local/maven
ENV PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

RUN apt-get update && \\
apt-get install -y curl git libltdl-dev && \\
apt-get clean all && \\
mkdir -p /usr/share/jenkins

COPY slave.jar /usr/share/jenkins/slave.jar
COPY jenkins-slave /usr/bin/jenkins-slave
RUN chmod +x /usr/bin/jenkins-slave

ENTRYPOINT ["jenkins-slave"]

# centos版的
FROM centos:7

RUN yum install -y java-1.8.0-openjdk maven curl git libtool-ltdl-devel && \\
yum clean all && \\
rm -rf /var/cache/yum/* && \\
mkdir -p /usr/share/jenkins

COPY slave.jar /usr/share/jenkins/slave.jar
COPY jenkins-slave /usr/bin/jenkins-slave
COPY settings.xml /etc/maven/settings.xml
RUN chmod +x /usr/bin/jenkins-slave

ENTRYPOINT ["jenkins-slave"]
  • 配置java的基础环境
配置 JDK和maven,把下载的二进制包解压放到如下目录
apache-maven-3.6.2-bin.tar.gz解压到的地址为 /usr/local/maven里面。
jdk-8u231-linux-x64.tar.gz解压到的地址为 /usr/local/jdk里面。
# 配置maven源,copy出maven的conf下的settings.xml文件
<mirror>
<id>central</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
  • 构建镜像
docker build -t 192.168.100.2/ops/jenkins-slave .
  • 推送镜像
1、docker中添加harbor仓库ip,否则可能无法正常登录
vim /etc/docker/daemon.json

"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["192.168.100.2"]

修改完重启下docker
2、登录harbor
docker login 192.168.100.2
docker push 192.168.100.2/ops/jenkins-slave

基于k8s构建企业jenkins

基于k8s构建企业jenkins

部署jenkins
jenkins-service-account.yml: jenkins的服务账号创建
jenkins.yml: 创建容器和service 服务得。进行可以访问。
Dockerfile: 主要用来生成 jenkins 镜像的。
registry-pull-secret.yaml:主要是用来部署时可以直接登录harbor仓库来拉取镜像(在部署jenkins需要用到)
# 构建镜像,并推送到harbor
docker build -t 192.168.100.2/ops/jenkins:lts-alpine .
docker push 192.168.100.2/ops/jenkins:lts-alpine
# 添加harbor登录信息
生成方式为: 可以在有登录的harbor 的node服务器上面执行以下命令生成认证信息
cat ~/.docker/config.json |base64 -w0 即可生成信息,然后替换registry-pull-secret.yaml里的.dockerconfigjson内容

基于k8s构建企业jenkins

# 依次执行yml文件
kubectl create -f jenkins-service-account.yml
# In GKE need to get RBAC permissions first with
# kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin [--user=<user-name>|--group=<group-name>]
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: jenkins
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
resources: ["pods/log"]
verbs: ["get","list","watch"]
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: jenkins
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: jenkins
subjects:
- kind: ServiceAccount
name: jenkins

# registry-pull-secret.yaml
kubectl create -f registry-pull-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: registry-pull-secret
namespace: default
data:
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjEwMC4yIjogewoJCQkiYXV0aCI6ICJZV1J0YVc0NmVIaDZlRUEzT0RrPSIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTkuMDMuMyAobGludXgpIgoJfQp9
type: kubernetes.io/dockerconfigjson

# jenkins.yml
kubectl create -f jenkins.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-jenkins-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
nfs:
path: /nfs/jenkins_home
server: 192.168.100.2

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-jenkins-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi

---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: jenkins
labels:
name: jenkins
spec:
serviceName: jenkins
replicas: 1
updateStrategy:
type: RollingUpdate
template:
metadata:
name: jenkins
labels:
name: jenkins
spec:
terminationGracePeriodSeconds: 10
serviceAccountName: jenkins
# imagePullSecrets:
# - name: registry-pull-secret
containers:
- name: jenkins
image: 192.168.100.2/ops/jenkins:lts-alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
- containerPort: 50000
resources:
limits:
cpu: 1
memory: 1Gi
requests:
cpu: 0.5
memory: 500Mi
env:
- name: LIMITS_MEMORY
valueFrom:
resourceFieldRef:
resource: limits.memory
divisor: 1Mi
- name: JAVA_OPTS
# value: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1 -XshowSettings:vm -Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
value: -Xmx$(LIMITS_MEMORY)m -XshowSettings:vm -Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
livenessProbe:
httpGet:
path: /login
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /login
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 5
#securityContext:
# fsGroup: 1000
volumes:
- name: jenkins-home
persistentVolumeClaim:
claimName: nfs-jenkins-pvc

---
apiVersion: v1
kind: Service
metadata:
name: jenkins
annotations:
# ensure the client ip is propagated to avoid the invalid crumb issue (k8s <1.7)
# service.beta.kubernetes.io/external-traffic: OnlyLocal
spec:
#type: LoadBalancer
type: NodePort
selector:
name: jenkins
# k8s 1.7+
# externalTrafficPolicy: Local
ports:
-
name: http
port: 80
targetPort: 8080
protocol: TCP
nodePort: 30003
-
name: agent
port: 50000
protocol: TCP

基于k8s构建企业jenkins

基于k8s构建企业jenkins

基于k8s构建企业jenkins

  • 访问
kubectl log jenkins-0   # 查看管理员密码
# 或者进入jenkins容器里查看

基于k8s构建企业jenkins



#私藏项目实操分享#

基于k8s构建企业jenkinscicd

介绍及准备工作1.概述持续集成(ContinuousIntegration,CI):代码合并、构建、部署、测试都在一起,不断地执行这个过程,并对结果反馈。持续部署(ContinuousDeployment,CD):部署到测试环境、预生产环境、生产环境。持续交付(ContinuousDeliv... 查看详情

基于coredns和k8s构建云原生场景下的企业级dns

容器作为近些年最火热的后端技术,加快了很多企业的数字化转型进程。目前的企业,不是在使用云原生技术,就是在转向云原生技术的过程中。在容器化进程中,如何保持业务的平稳迁移,如何将现有的一些服务设施一并进行... 查看详情

如何基于k8s多租能力构建serverlesscontainer

...、资源利用率、费用等问题。本次分享带来的是华为云在基于K8S构建企业级ServerlessContainer平台过程中的探索与实践,涉及容器安全隔离、多租管理、Serverless理念在Kub 查看详情

kubernetes企业项目实战04基于k8s构建efk+logstash+kafka日志平台(中)(代码片段)

目录一、安装存储日志组件Elasticsearch1.1创建名称空间1.2安装elasticsearch组件1)创建headlessservice服务2)通过statefulset创建elasticsearch集群二、安装kibana可视化UI界面本篇文章所用到的资料文件下载地址:kibana-v7.2.0-kubernetes... 查看详情

kubernetes企业项目实战04基于k8s构建efk+logstash+kafka日志平台(上)(代码片段)

目录一、日志对我们来说到底重不重要?日志打印的常见级别二、常见的日志收集方案2.1EFK2.2ELKStack2.3 ELK+filebeat2.4其他方案三、EFK组件详细介绍 3.1Elasticsearch组件介绍3.2Filebeat组件介绍1)Flebeat和Beat关系2)Filebeat... 查看详情

jenkinscicd代码构建发布流程(代码片段)

一、发布环境发布脚本#!/bin/bash#nodegroup1="172.16.8.11172.16.8.12"group2="172.16.8.13172.16.8.14"#deloytomcat1_dir=/app/tomcat1tomcat2_dir=/app/tomcat2tomcat3_dir=/app/tomcat3tomcat4_dir=/app/tomcat4#BACKUPbac 查看详情

k8s结合prometheus构建企业级监控告警系统

深度解读Prometheus什么是Prometheus?Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,... 查看详情

xmeternewsletter2022-05|企业版v4.0.0发布,基于k8s部署测试机资源

...底,XMeter企业版4.0.0版本完成了开发测试,正式发布。仍基于虚拟机/物理机部署测试资源的3.2.3版本也已完成大部分的优化项和修复项,预计于6月中旬发布。企业版4.0.0版本概览测试机资源基于k8s部署4.0.0版本目前支持在AWS的EKS... 查看详情

企业运维实战-k8s学习笔记17.k8s集群+prometheus监控部署基于prometheus实现k8s集群的hpa动态伸缩虚拟机部署prometheus监控(代码片段)

...业运维实战-k8s学习笔记17.k8s集群+Prometheus监控部署、基于prometheus实现k8s集群的hpa动态伸缩一、Prometheus简介二、Prometheus+k8s部署1.k8s集群部署Prometheus2.设定Prometheus监控应用nginx3.基于prometheus实现k8s集群的hpa动态伸缩三、虚拟... 查看详情

jenkins和k8s构建企业级devops容器云平台(代码片段)

什么是DevOps?DevOps中的Dev是Devlopment(开发),Ops是Operation(运维),用一句话来说DevOps 就是打通开发运维的壁垒,实现开发运维一体化。DevOps整个流程包括敏捷开发->持续集成->持续交付->... 查看详情

基于gitlab+docker+k8s打造自动化构建部署流程(代码片段)

...规范化,团队内部的项目上线部署复杂度提升,基于现有的环境和市场上主流的软件,打造了一套基于gitlab+docker+harbor+kubernetes的自动化构建部署流程(CI/CD),目前团队内部流程基本走通,整理了一份 查看详情

基于docker构建企业jenkinsci平台

持续集成(ContinuousIntegration,CI):代码合并、构建、部署、测试都在一起,不断地执行这个过程,并对结果反馈。持续部署(ContinuousDeployment,CD):部署的测试环境、预生产环境、生产环境。持续交付(ContinuousDelivery,CD):将最... 查看详情

构建企业级镜像仓库(代码片段)

...了更广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制,AD/LDAP继承以及审计日志的功能,足以满足企业需求.官方地址:https://vmware.github.io/barbor/cn/安装harborwgethttps://www.chenleilei.net/soft/k8s/harbor-offline-installer-v1.9.3... 查看详情

滴滴出行基于rocketmq构建企业级消息队列服务的实践

小结:1、 https://mp.weixin.qq.com/s/v6NM3UgX-qTI7yO1QPCJrw滴滴出行基于RocketMQ构建企业级消息队列服务的实践原创: 江海挺 阿里巴巴中间件 2018-11-01   查看详情

企业态势感知系统构建开发实战

一工作原理二基于NIDS的***检测三安全告警通过基于NIDS的***检测以及WAF拦截数据四日志分析五数据大屏 查看详情

基于k8sdockerjenkins构建springboot服务

Jenkins+github+docker+k8s+springboot本文介绍基于k8s、docker、jenkins、springboot构建docker服务。环境准备server-1k8s-masterCentos7ip地址10.12.5.110server-2k8s-nodeCentos7ip地址10.12.5.115两台服务执行如下命令$setenforce0$systemctlstop 查看详情

融云ceo韩迎:如何基于云通讯构建企业竞争力

近日,“第四届互联网+高峰论坛暨大数据应用峰会CIO时代中国行苏州站”活动成功举行。本次论坛由中国新一代IT产业推进联盟、江苏省企业信息化协会指导,CIO时代学院、苏州工业园区人工智能产业协会、江苏省企业信息化协... 查看详情

基于prometheus监控k8s集群

...如果你还没有安装库k8s集群,情参考: 从零开始搭建基于calico的kubenetes前言kubernetes显然已成为各大公司亲睐的容器编排工具,各种私有云公有云平台基于它构建,那么,我们怎么监控集群中的所有容器呢?目前有三套方案... 查看详情