GitLab+Jenkins+sonarqube+harbor+k8s测试记录(主要为流水线脚本)
需要安装node插件,然后进入tools里面设置安装位置。修改解析,将域名指向k8s集群中任一地址。
·
安装:
GitLab+Jenkins+sonarqube+harbor+k8s安装-CSDN博客
springboot:
前置条件:
GitLab+Jenkins+Sonarqube使用-CSDN博客
触发器看上面的链接:
shell获取pom.xml版本号命令:
V=`xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml`
流水线脚本:
该脚本直接删除了pod.yaml中的服务和容器然后重新拉起,存在很大缺陷,涉及版本发布之类可以自行编辑脚本
pipeline {
agent none
tools {
// 设定maven环境
maven "maven"
jdk "jdk17"
}
stages {
// 定义一个git块,拉取代码并进行代码测试
stage('Git') {
agent any
steps {
// 片段生成器生成的拉取代码
git branch: 'main', credentialsId: 'gitlab', poll: false, url: 'http://172.16.4.141:12000/root/test.git'
}
}
// 构建并代码检查
stage("build & SonarQube") {
agent any
steps {
withSonarQubeEnv('SonarQube') {
sh "mvn clean package sonar:sonar -Dsonar.projectKey=root_test_789a3938-6ad8-46c6-9008-04829a1223b7 -Dsonar.projectName='test'"
}
}
}
// 等待检查结果,如果不通过则停止
stage("wait sonarqube result") {
steps {
timeout(time: 1) {
waitForQualityGate abortPipeline: true
}
}
}
stage("pass"){
agent any
steps {
sh '''
SERVER_NAME=test
JAR_NAME=test-0.0.1-SNAPSHOT
JENKINS_HOME=/var/lib/jenkins/workspace/test
cd $JENKINS_HOME/target
cp $JENKINS_HOME/Dockerfile $JENKINS_HOME/target
docker rmi 172.16.4.141:13000/k8s/$SERVER_NAME > /dev/null || true
docker build -t $SERVER_NAME .
docker tag $SERVER_NAME:latest 172.16.4.141:13000/k8s/$SERVER_NAME:latest
docker push 172.16.4.141:13000/k8s/$SERVER_NAME:latest
kubectl delete -f ../pod.yaml
kubectl apply -f ../pod.yaml'''
}
}
}
}
dockerfile:
FROM openjdk:17-jdk-slim
ENV PARAMS=""
ADD *.jar /test.jar
ENTRYPOINT ["sh","-c","java -jar /test.jar $PARAMS"]
pod.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: opt-test
spec:
replicas: 1
selector:
matchLabels:
app: opt-test
template:
metadata:
labels:
app: opt-test
spec:
imagePullSecrets:
- name: harbor
containers:
- name: opt-test
image: harbor.cncf.net/k8s/test:latest
imagePullPolicy: Always
ports:
- containerPort: 9999
---
apiVersion: v1
kind: Service
metadata:
name: opt-service
spec:
selector:
app: opt-test
ports:
- protocol: TCP
port: 80
targetPort: 9999
VUE项目:
需要安装node插件,然后进入tools里面设置安装位置
流水线脚本
pipeline {
agent none
tools{
nodejs 'node16'
}
stages {
// 定义一个git块,拉取代码并进行代码测试
stage('Git') {
agent any
steps {
// 片段生成器生成的拉取代码
git branch: 'main', credentialsId: 'gitlab', poll: false, url: 'http://172.16.4.141:12000/root/web.git'
}
}
// 构建并代码检查
stage("build & SonarQube") {
agent any
steps {
script{
scannerHome = tool 'SonarScanner'
}
withSonarQubeEnv('SonarQube') {
sh "${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=root_web_d2e6b02f-147f-46f4-9a4f-04d2c4063882"
}
}
}
// 等待检查结果,如果不通过则停止
stage("wait sonarqube result") {
steps {
timeout(time: 1) {
waitForQualityGate abortPipeline: true
}
}
}
stage("pass"){
agent any
steps {
sh '''
SERVER_NAME=web
JENKINS_HOME=/var/lib/jenkins/workspace/web
cd $JENKINS_HOME
npm install
npm run build
docker rmi 172.16.4.141:13000/k8s/$SERVER_NAME > /dev/null || true
docker build -t $SERVER_NAME .
docker tag $SERVER_NAME:latest 172.16.4.141:13000/k8s/$SERVER_NAME:latest
docker push 172.16.4.141:13000/k8s/$SERVER_NAME:latest
kubectl delete -f ./pod.yaml
kubectl apply -f ./pod.yaml'''
}
}
}
}
dockerfile:
# 使用官方的Nginx镜像
FROM nginx:1.25.4
# 将工作目录设置为/app
WORKDIR /app
# 复制文件到工作目录 如打包后有其他文件需增加
COPY dist/css/* /app/css/
COPY dist/js/* /app/js/
COPY dist/favicon.ico /app/
COPY dist/index.html /app/
# 删除nginx容器中代码目录中自带的文件
RUN rm /usr/share/nginx/html/*
# 将/app 中所有文件复制到 /usr/share/nginx/html/
RUN cp -r /app/* /usr/share/nginx/html/
# 暴露 80 端口供外部访问
EXPOSE 80
# 容器启动时运行 Nginx
CMD ["nginx", "-g", "daemon off;"]
pod.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-test
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: web-test
template:
metadata:
labels:
app: web-test
spec:
imagePullSecrets:
- name: harbor
containers:
- name: web-test
image: harbor.cncf.net/k8s/web
imagePullPolicy: Always
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web-test
ports:
- protocol: TCP
port: 80
targetPort: 80
如果要设置域名访问:
新建一个ingressClass:
新建ingress:
修改解析,将域名指向k8s集群中任一地址
更多推荐
已为社区贡献2条内容
所有评论(0)