k8s + Jenkins Pipeline + Gitlab + Harbor 环境发布业务
本文用于个人记录,只有yaml文件,无其他相关,本人采用的nfs存储。gitlab-deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: gitlabspec:selector:matchLabels:app: gitlabrevisionHistoryLimit: 2template:metadata:labels:ap
·
提前jenkins安装插件kubernetes pipeline
部署gitlab
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitlab
namespace: deploy
spec:
selector:
matchLabels:
app: gitlab
revisionHistoryLimit: 2
template:
metadata:
labels:
app: gitlab
spec:
nodeName: k8s-node01
restartPolicy: Always
containers:
- image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.2.0-ce.0
name: gitlab
imagePullPolicy: IfNotPresent
ports:
- containerPort: 443
name: gitlab443
- containerPort: 80
name: gitlab80
- containerPort: 22
name: gitlab22
volumeMounts:
- name: gitlab-persistent-config
mountPath: /etc/gitlab
- name: gitlab-persistent-logs
mountPath: /var/log/gitlab
- name: gitlab-persistent-data
mountPath: /var/opt/gitlab
imagePullSecrets:
- name: devops-repo
volumes:
- name: gitlab-persistent-config
nfs:
server: 172.30.11.133
path: /nfsdata/gitlab/config
- name: gitlab-persistent-logs
nfs:
server: 172.30.11.133
path: /nfsdata/gitlab/logs
- name: gitlab-persistent-data
nfs:
server: 172.30.11.133
path: /nfsdata/gitlab/data
---
apiVersion: v1
kind: Service
metadata:
name: gitlab
namespace: deploy
spec:
selector:
app: gitlab
type: NodePort
ports:
- name: https
port: 443
targetPort: 443
protocol: TCP
- name: http
port: 80
targetPort: 80
protocol: TCP
配置jenkins的pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-data
namespace: deploy
spec:
storageClassName: "managed-nfs-storage"
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
部署jenkins
root@k8s-master01:~# kubectl get ns test -o yaml | kubectl apply -f -
Warning: resource namespaces/test is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be u
root@k8s-master01:~/kubernetes/jenkins_deploy# ls
gitlab.yaml jenkins-pvc.yaml jenkins.yaml
root@k8s-master01:~/kubernetes/jenkins_deploy# cat gitlab.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitlab
namespace: deploy
spec:
selector:
matchLabels:
app: gitlab
revisionHistoryLimit: 2
template:
metadata:
labels:
app: gitlab
spec:
nodeName: k8s-node01
restartPolicy: Always
containers:
- image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:17.2.0-ce.0
name: gitlab
imagePullPolicy: IfNotPresent
ports:
- containerPort: 443
name: gitlab443
- containerPort: 80
name: gitlab80
- containerPort: 22
name: gitlab22
root@k8s-master01:~/kubernetes/jenkins_deploy# ls
gitlab.yaml jenkins-pvc.yaml jenkins.yaml
root@k8s-master01:~/kubernetes/jenkins_deploy# cat jenkins
cat: jenkins: No such file or directory
root@k8s-master01:~/kubernetes/jenkins_deploy# cat jenkins.yaml
apiVersion: v1
kind: Service
metadata:
name: jenkins
namespace: deploy
labels:
app: jenkins
spec:
type: NodePort
ports:
- name: http
port: 8080
targetPort: 8080
nodePort: 32001
- name: jnlp
port: 50000
targetPort: 50000
nodePort: 32002
selector:
app: jenkins
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
namespace: deploy
labels:
app: jenkins
spec:
selector:
matchLabels:
app: jenkins
replicas: 1
template:
metadata:
labels:
app: jenkins
spec:
serviceAccount: jenkins
containers:
- name: jenkins
image: docker.io/jenkins/jenkins:2.488
securityContext:
runAsUser: 0
privileged: true
ports:
- name: http
containerPort: 8080
- name: jnlp
containerPort: 50000
resources:
limits:
memory: 2Gi
cpu: "2000m"
requests:
memory: 2Gi
cpu: "2000m"
env:
- name: LIMITS_MEMORY
valueFrom:
resourceFieldRef:
resource: limits.memory
divisor: 1Mi
- name: "JAVA_OPTS"
value: "
-Xmx$(LIMITS_MEMORY)m
-XshowSettings:vm
-Dhudson.slaves.NodeProvisioner.initialDelay=0
-Dhudson.slaves.NodeProvisioner.MARGIN=50
-Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
-Duser.timezone=Asia/Shanghai
"
- name: "JENKINS_OPTS"
value: "--prefix=/jenkins"
volumeMounts:
- name: data
mountPath: /var/jenkins_home
volumes:
- name: data
persistentVolumeClaim:
claimName: jenkins-data
Jenkins配置k8s集群,
因为jenkins是在k8s集群内部的,新建clouds只需要配置一个名称即可
配置PodTemplate
我这里容器配置就是用的默认,然后添加一个卷进去,因为要使用kubectl命令
创建Pipeline job测试
我这个比较简单,gitlab代码中只有一个yaml文件和index.html,这个就根据自己的业务发布需求重写pipeline就可以
pipeline {
agent {label "jnlp-slave"}
environment {
harbor_addr = "172.30.11.133:8000"
}
parameters {
choice(
name: 'Namespace',
choices: ["test", "dev", "cmdb"],
description: "选择部署环境"
)
}
stages {
stage('1. Clone') {
steps {
git credentialsId: 'gitlab', url: "http://gitlab/pro/cmdb.git", branch: "main"
script {
build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
env.BRANCH_NAME = sh(returnStdout: true, script: 'git branch').trim()
}
}
}
stage('2. build') {
steps {
sh "kubectl get ns ${params.Namespace} -o yaml | kubectl apply -f -"
sh "kubectl create cm index --from-file=./index.html -n ${params.Namespace} --dry-run -o yaml | kubectl apply -f -"
sh "kubectl apply -f nginx-deploy.yaml -n ${params.Namespace}"
sh "ls"
}
}
stage('3. test') {
steps {
sh "curl -s http://nginx-cmdb.${params.Namespace}"
}
}
}
}
更多推荐
所有评论(0)