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