流水线——》配置
pipeline {
agent any
environment {
PROJECT_NAME_CN = '后端服务'
PROJECT_NAME = 'rules-server'
PACKAGE_TYPE = 'jar'
PROJECT_VERSION = 'v1.0.0'
PROJECT_BRANCH = 'development'
PROJECT_GIT_URL = 'http://.git'
DOCKER_REG_PREFIX = 'registry.com/app/'
PROJECT_PORT = master对外端口
EXPOSE_PORT = 服务端口
KUBERNETES_ENV = '集群缩写'
}
stages {
stage('git') {
steps {
echo '-------------------------------------------get code from git-------------------------------------------'
dir(path: "./") {
git(
branch: "${PROJECT_BRANCH}",
credentialsId: '',
url: "${PROJECT_GIT_URL}",
changelog: true
)
}
}
}
stage('prepare') {
steps {
echo '--------------------------------------------preparing file---------------------------------------------'
sh '''
if [ ${PACKAGE_TYPE} == 'npm' ] ;then
cp /opt/jenkins/files/nginx.conf ./nginx.conf
fi
cp /opt/jenkins/files/Dockerfile-${PACKAGE_TYPE} ./Dockerfile
cp rules-server/src/main/resources/Deployment.yaml ./Deployment.yaml
sed -i $(echo "s/#PROJECT_NAME/${PROJECT_NAME}/g") Deployment.yaml
sed -i $(echo "s/#PROJECT_PORT/${PROJECT_PORT}/g") Deployment.yaml
sed -i $(echo "s/#EXPOSE_PORT/${EXPOSE_PORT}/g") Deployment.yaml
sed -i $(echo "s/#PROJECT_VERSION/${PROJECT_VERSION}/g") Deployment.yaml
'''
}
}
stage('compile'){
steps{
echo '--------------------------------------------compile start--------------------------------------------'
sh '''
cd ${WORKSPACE}
pwd
if [ ${PACKAGE_TYPE} == 'npm' ] ;then
echo "npm compile start"
cnpm install --ignore-scripts
npm run build
else
echo "maven compile start"
mvn clean package -B -DskipTests
mv rules-server/target/*.${PACKAGE_TYPE} app.${PACKAGE_TYPE}
fi
'''
}
}
stage('docker-build') {
steps {
echo '-------------------------------------------push mirrors start-------------------------------------------'
sh '''
docker build -t $(echo ${DOCKER_REG_PREFIX}${PROJECT_NAME}:${PROJECT_VERSION}) .
docker push $(echo ${DOCKER_REG_PREFIX}${PROJECT_NAME}:${PROJECT_VERSION})
'''
}
}
stage('k8s-deploy') {
steps {
echo '--------------------------------------------deployment start--------------------------------------------'
sh '''
kubectl config use-context k8s-${KUBERNETES_ENV}-admin@k8s-${KUBERNETES_ENV}
kubectl apply -f Deployment.yaml
kubectl set env deploy/$PROJECT_NAME DEPLOY_DATE="$(date)"
'''
}
}
stage('sonar') {
steps {
echo '------------------------------------------------sonar----------------------------------------------------'
sh '''
mvn sonar:sonar \
-Dsonar.host.url=$SONAR_URL \
-Dsonar.login=admin \
-Dsonar.password=admin \
-Dsonar.issuesReport.html.enable=true \
-Dsonar.preview.excludePlugins=issueassign,scmstats \
-Dsonar.projectName=${PROJECT_NAME_CN}
'''
}
}
}
}
6f82e3c-2b61-4bcf-902d-d681eddd1a2 aa
Deployment.yaml --- apiVersion: apps/v1 kind: Deployment metadata: name: #PROJECT_NAME labels: app: #PROJECT_NAME version: #PROJECT_VERSION spec: selector: matchLabels: app: #PROJECT_NAME replicas: 1 template: metadata: labels: app: #PROJECT_NAME spec: containers: - name: #PROJECT_NAME image: registry..com/app/#PROJECT_NAME:#PROJECT_VERSION imagePullPolicy: Always env: - name: MSP_REGISTRY_PORT value: "8500" - name: JAVA_OPTS value: "-server -Xms1024m -Xmx1024m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true " volumeMounts: - name: nfs mountPath: /home/datacenter/appdata volumes: - name: nfs nfs: path: /home/datacenter/appdata server: ip --- apiVersion: v1 kind: Service metadata: name: #PROJECT_NAME labels: app: #PROJECT_NAME version: #PROJECT_VERSION spec: selector: app: #PROJECT_NAME type: NodePort ports: - name: tcp-8080 protocol: TCP port: #EXPOSE_PORT targetPort: #EXPOSE_PORT nodePort: #PROJECT_PORT