This commit is contained in:
2026-03-03 17:04:35 +08:00
parent bbb872952e
commit 9f4aaaae71
3 changed files with 40 additions and 63 deletions
+8 -20
View File
@@ -19,11 +19,6 @@ pipeline {
CLUSTER_NAME = 'cluster1' CLUSTER_NAME = 'cluster1'
} }
parameters {
choice(name: 'DEPLOY_ENV', choices: ['dev', 'staging', 'prod'], description: '选择部署环境')
choice(name: 'BUILD_POLICY', choices: ['auto', 'force_build', 'skip_build'], description: '构建策略:auto=按代码变更判断')
}
stages { stages {
stage('Checkout') { stage('Checkout') {
steps { steps {
@@ -48,13 +43,6 @@ pipeline {
stage('Check Code Changes') { stage('Check Code Changes') {
steps { steps {
script { script {
if (params.BUILD_POLICY == 'force_build') {
env.SKIP_BUILD = 'false'
echo "BUILD_POLICY=force_build,强制构建"
} else if (params.BUILD_POLICY == 'skip_build') {
env.SKIP_BUILD = 'true'
echo "BUILD_POLICY=skip_build,跳过构建"
} else {
def prev = env.GIT_PREVIOUS_SUCCESSFUL_COMMIT ?: '' def prev = env.GIT_PREVIOUS_SUCCESSFUL_COMMIT ?: ''
if (!prev?.trim()) { if (!prev?.trim()) {
echo "未找到上次成功构建提交,默认执行构建" echo "未找到上次成功构建提交,默认执行构建"
@@ -66,7 +54,6 @@ pipeline {
) )
env.SKIP_BUILD = (rc == 0) ? 'true' : 'false' env.SKIP_BUILD = (rc == 0) ? 'true' : 'false'
} }
}
echo "代码变更检查结果: SKIP_BUILD=${env.SKIP_BUILD}" echo "代码变更检查结果: SKIP_BUILD=${env.SKIP_BUILD}"
} }
@@ -128,7 +115,7 @@ pipeline {
} }
def fullImageWithTag = "${FULL_IMAGE_NAME}:${env.IMAGE_TAG}" def fullImageWithTag = "${FULL_IMAGE_NAME}:${env.IMAGE_TAG}"
deployToCluster(CLUSTER_CONFIG_ID, fullImageWithTag, params.DEPLOY_ENV) deployToCluster(CLUSTER_CONFIG_ID, fullImageWithTag)
} }
} }
} }
@@ -146,7 +133,6 @@ pipeline {
echo "构建结束。镜像标签: ${env.IMAGE_TAG}" echo "构建结束。镜像标签: ${env.IMAGE_TAG}"
echo "完整镜像: ${FULL_IMAGE_NAME}:${env.IMAGE_TAG}" echo "完整镜像: ${FULL_IMAGE_NAME}:${env.IMAGE_TAG}"
echo "是否跳过构建: ${env.SKIP_BUILD}" echo "是否跳过构建: ${env.SKIP_BUILD}"
echo "部署环境: ${params.DEPLOY_ENV}"
echo "目标集群: ${CLUSTER_NAME}" echo "目标集群: ${CLUSTER_NAME}"
} }
failure { failure {
@@ -155,12 +141,15 @@ pipeline {
} }
} }
def deployToCluster(String clusterConfigId, String fullImageWithTag, String deployEnv) { def deployToCluster(String clusterConfigId, String fullImageWithTag) {
withCredentials([ withCredentials([
file(credentialsId: clusterConfigId, variable: 'KUBECONFIG'), file(credentialsId: clusterConfigId, variable: 'KUBECONFIG'),
usernamePassword(credentialsId: REGISTRY_CREDENTIALS_ID, usernamePassword(credentialsId: REGISTRY_CREDENTIALS_ID,
usernameVariable: 'REGISTRY_USER', usernameVariable: 'REGISTRY_USER',
passwordVariable: 'REGISTRY_PASS') passwordVariable: 'REGISTRY_PASS')
]) {
withEnv([
"FULL_IMAGE_WITH_TAG=${fullImageWithTag}"
]) { ]) {
sh ''' sh '''
set -eux set -eux
@@ -182,8 +171,7 @@ def deployToCluster(String clusterConfigId, String fullImageWithTag, String depl
echo "使用kubectl路径: $KUBECTL_PATH" echo "使用kubectl路径: $KUBECTL_PATH"
echo "部署到集群: ${CLUSTER_NAME}" echo "部署到集群: ${CLUSTER_NAME}"
echo "部署环境: ${DEPLOY_ENV}" echo "镜像: ${FULL_IMAGE_WITH_TAG}"
echo "镜像: ${FULL_IMAGE_NAME}:${IMAGE_TAG}"
echo "命名空间: ${K8S_NAMESPACE}" echo "命名空间: ${K8S_NAMESPACE}"
k() { k() {
@@ -199,8 +187,7 @@ def deployToCluster(String clusterConfigId, String fullImageWithTag, String depl
--namespace="${K8S_NAMESPACE}" \ --namespace="${K8S_NAMESPACE}" \
--dry-run=client -o yaml | k apply -f - --dry-run=client -o yaml | k apply -f -
sed -e "s|image:.*more_dots:.*|image: ${FULL_IMAGE_NAME}:${IMAGE_TAG}|g" \ sed -e "s|image:.*more_dots:.*|image: ${FULL_IMAGE_WITH_TAG}|g" \
-e "s|value: \".*\"|value: \"${DEPLOY_ENV}\"|g" \
more_dots/k8s/deployment.yaml > /tmp/deployment-${K8S_NAMESPACE}.yaml more_dots/k8s/deployment.yaml > /tmp/deployment-${K8S_NAMESPACE}.yaml
k apply -f /tmp/deployment-${K8S_NAMESPACE}.yaml -n "${K8S_NAMESPACE}" k apply -f /tmp/deployment-${K8S_NAMESPACE}.yaml -n "${K8S_NAMESPACE}"
@@ -212,4 +199,5 @@ def deployToCluster(String clusterConfigId, String fullImageWithTag, String depl
k get pods -n "${K8S_NAMESPACE}" -l app=more-dots k get pods -n "${K8S_NAMESPACE}" -l app=more-dots
''' '''
} }
}
} }
+8 -20
View File
@@ -19,11 +19,6 @@ pipeline {
CLUSTER_NAME = 'cluster2' CLUSTER_NAME = 'cluster2'
} }
parameters {
choice(name: 'DEPLOY_ENV', choices: ['dev', 'staging', 'prod'], description: '选择部署环境')
choice(name: 'BUILD_POLICY', choices: ['auto', 'force_build', 'skip_build'], description: '构建策略:auto=按代码变更判断')
}
stages { stages {
stage('Checkout') { stage('Checkout') {
steps { steps {
@@ -48,13 +43,6 @@ pipeline {
stage('Check Code Changes') { stage('Check Code Changes') {
steps { steps {
script { script {
if (params.BUILD_POLICY == 'force_build') {
env.SKIP_BUILD = 'false'
echo "BUILD_POLICY=force_build,强制构建"
} else if (params.BUILD_POLICY == 'skip_build') {
env.SKIP_BUILD = 'true'
echo "BUILD_POLICY=skip_build,跳过构建"
} else {
def prev = env.GIT_PREVIOUS_SUCCESSFUL_COMMIT ?: '' def prev = env.GIT_PREVIOUS_SUCCESSFUL_COMMIT ?: ''
if (!prev?.trim()) { if (!prev?.trim()) {
echo "未找到上次成功构建提交,默认执行构建" echo "未找到上次成功构建提交,默认执行构建"
@@ -66,7 +54,6 @@ pipeline {
) )
env.SKIP_BUILD = (rc == 0) ? 'true' : 'false' env.SKIP_BUILD = (rc == 0) ? 'true' : 'false'
} }
}
echo "代码变更检查结果: SKIP_BUILD=${env.SKIP_BUILD}" echo "代码变更检查结果: SKIP_BUILD=${env.SKIP_BUILD}"
} }
@@ -128,7 +115,7 @@ pipeline {
} }
def fullImageWithTag = "${FULL_IMAGE_NAME}:${env.IMAGE_TAG}" def fullImageWithTag = "${FULL_IMAGE_NAME}:${env.IMAGE_TAG}"
deployToCluster(CLUSTER_CONFIG_ID, fullImageWithTag, params.DEPLOY_ENV) deployToCluster(CLUSTER_CONFIG_ID, fullImageWithTag)
} }
} }
} }
@@ -146,7 +133,6 @@ pipeline {
echo "构建结束。镜像标签: ${env.IMAGE_TAG}" echo "构建结束。镜像标签: ${env.IMAGE_TAG}"
echo "完整镜像: ${FULL_IMAGE_NAME}:${env.IMAGE_TAG}" echo "完整镜像: ${FULL_IMAGE_NAME}:${env.IMAGE_TAG}"
echo "是否跳过构建: ${env.SKIP_BUILD}" echo "是否跳过构建: ${env.SKIP_BUILD}"
echo "部署环境: ${params.DEPLOY_ENV}"
echo "目标集群: ${CLUSTER_NAME}" echo "目标集群: ${CLUSTER_NAME}"
} }
failure { failure {
@@ -155,12 +141,15 @@ pipeline {
} }
} }
def deployToCluster(String clusterConfigId, String fullImageWithTag, String deployEnv) { def deployToCluster(String clusterConfigId, String fullImageWithTag) {
withCredentials([ withCredentials([
file(credentialsId: clusterConfigId, variable: 'KUBECONFIG'), file(credentialsId: clusterConfigId, variable: 'KUBECONFIG'),
usernamePassword(credentialsId: REGISTRY_CREDENTIALS_ID, usernamePassword(credentialsId: REGISTRY_CREDENTIALS_ID,
usernameVariable: 'REGISTRY_USER', usernameVariable: 'REGISTRY_USER',
passwordVariable: 'REGISTRY_PASS') passwordVariable: 'REGISTRY_PASS')
]) {
withEnv([
"FULL_IMAGE_WITH_TAG=${fullImageWithTag}"
]) { ]) {
sh ''' sh '''
set -eux set -eux
@@ -182,8 +171,7 @@ def deployToCluster(String clusterConfigId, String fullImageWithTag, String depl
echo "使用kubectl路径: $KUBECTL_PATH" echo "使用kubectl路径: $KUBECTL_PATH"
echo "部署到集群: ${CLUSTER_NAME}" echo "部署到集群: ${CLUSTER_NAME}"
echo "部署环境: ${DEPLOY_ENV}" echo "镜像: ${FULL_IMAGE_WITH_TAG}"
echo "镜像: ${FULL_IMAGE_NAME}:${IMAGE_TAG}"
echo "命名空间: ${K8S_NAMESPACE}" echo "命名空间: ${K8S_NAMESPACE}"
k() { k() {
@@ -199,8 +187,7 @@ def deployToCluster(String clusterConfigId, String fullImageWithTag, String depl
--namespace="${K8S_NAMESPACE}" \ --namespace="${K8S_NAMESPACE}" \
--dry-run=client -o yaml | k apply -f - --dry-run=client -o yaml | k apply -f -
sed -e "s|image:.*more_dots:.*|image: ${FULL_IMAGE_NAME}:${IMAGE_TAG}|g" \ sed -e "s|image:.*more_dots:.*|image: ${FULL_IMAGE_WITH_TAG}|g" \
-e "s|value: \".*\"|value: \"${DEPLOY_ENV}\"|g" \
more_dots/k8s/deployment.yaml > /tmp/deployment-${K8S_NAMESPACE}.yaml more_dots/k8s/deployment.yaml > /tmp/deployment-${K8S_NAMESPACE}.yaml
k apply -f /tmp/deployment-${K8S_NAMESPACE}.yaml -n "${K8S_NAMESPACE}" k apply -f /tmp/deployment-${K8S_NAMESPACE}.yaml -n "${K8S_NAMESPACE}"
@@ -212,4 +199,5 @@ def deployToCluster(String clusterConfigId, String fullImageWithTag, String depl
k get pods -n "${K8S_NAMESPACE}" -l app=more-dots k get pods -n "${K8S_NAMESPACE}" -l app=more-dots
''' '''
} }
}
} }
+8 -7
View File
@@ -1,20 +1,20 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: more_dots name: more-dots
namespace: default namespace: more-dots
spec: spec:
replicas: 2 replicas: 2
selector: selector:
matchLabels: matchLabels:
app: more_dots app: more-dots
template: template:
metadata: metadata:
labels: labels:
app: more_dots app: more-dots
spec: spec:
containers: containers:
- name: more_dots - name: more-dots
image: harbor.yourdomain.com/library/more_dots:${IMAGE_TAG} image: harbor.yourdomain.com/library/more_dots:${IMAGE_TAG}
ports: ports:
- containerPort: 8000 - containerPort: 8000
@@ -25,10 +25,11 @@ spec:
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: more_dots-service name: more-dots-service
namespace: more-dots
spec: spec:
selector: selector:
app: more_dots app: more-dots
ports: ports:
- port: 80 - port: 80
targetPort: 8000 targetPort: 8000