apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
spec:
replicas: 1
selector:
matchLabels:
name: jenkins
template:
metadata:
name: jenkins
labels:
name: jenkins
spec:
serviceAccountName: jenkins
containers:
- name: jenkins
image: jenkins/jenkins:2.372
ports:
- containerPort: 8080
- containerPort: 50000
resources:
limits:
cpu: 1.5
memory: 2Gi
requests:
cpu: 1
memory: 1Gi
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
- name: maven
mountPath: /usr/local/maven/apache-maven-3.8.5
- name: jdk
mountPath: /usr/local/jdk/jdk1.8.0_201
- name: system
mountPath: /etc/profile
- name: warehouse
mountPath: /root/.m2
securityContext:
runAsUser: 0
volumes:
- name: jenkins-home
persistentVolumeClaim:
claimName: jenkins
- name: maven
hostPath:
path: /usr/local/maven/apache-maven-3.8.5
# 宿主机的maven包地址
- name: jdk
hostPath:
path: /usr/local/jdk/jdk1.8.0_201
# 宿主机的java包地址
- name: system
hostPath:
path: /etc/profile
# 宿主机的环境变量
- name: warehouse
hostPath:
path: /root/.m2
# 宿主机的mvn本地仓库
---
apiVersion: v1
kind: Service
metadata:
name: jenkins
spec:
selector:
name: jenkins
type: NodePort
ports:
- name: http
port: 80
targetPort: 8080
protocol: TCP
nodePort: 30008
- name: agent
port: 50000
protocol: TCP
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins
spec:
storageClassName: "managed-nfs-storage"
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: jenkins
rules:
- apiGroups: [""]
resources: ["pods","events"]
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","events"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: jenkins
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: jenkins
subjects:
- kind: ServiceAccount
name: jenkins
kubectl apply -f jenkins.yaml
[root@k8s-master1 jenkins]# kubectl exec -it jenkins-8654c79996-6bxff -- bash
[root@k8s-master1 jenkins]# source /etc/profile
# 1、检测容器内是否可以上网
root@jenkins-8654c79996-6bxff:~# curl www.baidu.com
#如果能访问到百度代表可以连上网,如果不行,将8.8.8.8加到resolv.conf,在重新试下
root@jenkins-8654c79996-6bxff:~# echo "nameserver 8.8.8.8" >> /etc/resolv.conf
# 找到nfs服务器,进入挂载目录
[root@k8s-node2 kubernetes]# ll
drwxrwxrwx 16 root root 4096 Oct 25 17:56 default-jenkins-pvc-eba3b68b-1891-4521-becd-8f0fa6936e9a
drwxrwxrwx 3 root root 4096 Sep 21 14:11 monitor-grafana-pvc-0a3154e7-e28d-4c5f-b6d7-19829997f209
drwxrwxrwx 27 nobody nobody 4096 Oct 26 09:00 monitor-prometheus-pvc-ee8a8670-d657-47ce-b2f4-1905e1921d76
[root@k8s-node2 default-jenkins-pvc-eba3b68b-1891-4521-becd-8f0fa6936e9a]# cat hudson.model.UpdateCenter.xml
# 找到url那一行,替换成阿里云插件地址
'1.1' encoding='UTF-8'?>
default</id>
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
[root@k8s-master1 jenkins]# kubectl get pod,svc -o wide
# 找到pod容器分配在哪台机器和service访问外网的端口。然后在浏览器上访问
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/jenkins-8654c79996-6bxff 1/1 Running 0 17h 172.17.0.3 k8s-node1
pod/nfs-client-provisioner-6b97c8fd96-rz7x9 1/1 Running 5 (5d19h ago) 34d 172.17.0.2 k8s-node1
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/jenkins NodePort 10.0.0.121 80:30008/TCP,50000:30705/TCP 5d19h name=jenkins
service/kubernetes ClusterIP 10.0.0.1 443/TCP 35d
在jenkins首页找到系统配置-----> 插件管理
注意:要拉取gogs仓库的代码,需提前在gogs仓库中创建钩子。
注意:pipeline拉取代码是在jenkins中自己生成的
pipeline{
agent any
stages {
stage('1、拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], browser: [$class: 'GogsGit', repoUrl: ''], extensions: [], userRemoteConfigs: [[credentialsId: '73f9c4f6-9224-450c-a07c-f3a7191ddbba', url: 'http://代码仓库地址:端口/xxx/xxx-group-buy.git']]])
}
}
stage('2、打包构建') {
steps {
sh """
ls
mvn clean package
"""
}
}
}
}
错误1:jenkins安装时显示以离线