jenkins 介绍
jenkins 介绍
jenkins 是一个基于 java 开发的在自动化服务器,是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
特性:
易于安装
易于配置
集成 RSS/Email,通过 RSS 发布构建结果或通过 email 通知
生成 Junit/TestNG 测试报告
支持分布式构建,让多台计算机一起构建
文件识别,能跟踪哪次构建了哪些包
插件支持,大量官方插件以及可自定义插件
jenkins 搭建
war 部署
下载最新的 jenkins war 包 下载地址 https://www.jenkins.io/zh/
两种启动方法:
java -jar jenkins.war, 然后通过 8080 端口访问
将 war 包放到 tomcat 的 webapps 目录下,然后启动 tomcat,通过本机域名/jenkins访问
k8s部署
创建yaml文件 jenkins.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins
namespace: mysql-nacos
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: jenkins
namespace: mysql-nacos
rules:
- apiGroups: ["extensions", "apps"]
resources: ["deployments", "ingresses"]
verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
- apiGroups: [""]
resources: ["services"]
verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
- 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", "events"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: jenkins
namespace: mysql-nacos
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: jenkins
subjects:
- kind: ServiceAccount
name: jenkins
namespace: mysql-nacos
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: jenkins
namespace: mysql-nacos
spec:
serviceName: jenkins
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
serviceAccount: jenkins
initContainers:
- name: fix-permissions
image: busybox:1.35.0
command: ["sh", "-c", "chown -R 1000:1000 /var/jenkins_home"]
securityContext:
privileged: true
volumeMounts:
- name: jenkins-home-sit-test
mountPath: /var/jenkins_home
containers:
- name: jenkins
image: jenkins/jenkins:2.414.1-lts-jdk11
imagePullPolicy: IfNotPresent
env:
- name: JAVA_OPTS
value: -Dhudson.model.DownloadService.noSignatureCheck=true
ports:
- containerPort: 8080
name: web
protocol: TCP
- containerPort: 50000
name: agent
protocol: TCP
resources:
limits:
cpu: 4000m
memory: 4Gi
requests:
cpu: 500m
memory: 1000Mi
readinessProbe:
httpGet:
path: /login
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 5
failureThreshold: 12
volumeMounts:
- name: jenkins-home-sit-test
mountPath: /var/jenkins_home
volumeClaimTemplates:
- metadata:
name: jenkins-home-sit-test
labels:
app: jenkins
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: rook-ceph-block
resources:
requests:
storage: 3Gi
kubectl apply -f jenkins.yaml
kubectl get po -n mysql-nacos
NAME READY STATUS RESTARTS AGE
jenkins-0 1/1 Running 0 27m
创建svc访问 jenkins-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: jenkins
namespace: mysql-nacos
labels:
app: jenkins
spec:
type: NodePort
selector:
app: jenkins
ports:
- name: web
port: 8080
targetPort: web
nodePort: 30337
- name: agent
port: 50000
targetPort: agent
kubectl apply -f jenkins-svc.yaml
通过主机ip+端口访问即可