init
This commit is contained in:
Vendored
+90
-114
@@ -5,9 +5,9 @@ pipeline {
|
|||||||
// GitLab配置
|
// GitLab配置
|
||||||
GITLAB_URL = 'https://gitlab.xpaas.lenovo.com'
|
GITLAB_URL = 'https://gitlab.xpaas.lenovo.com'
|
||||||
GITLAB_REPO = 'artificial-intelligence-platform/lenovo-ipc'
|
GITLAB_REPO = 'artificial-intelligence-platform/lenovo-ipc'
|
||||||
GITLAB_CREDENTIALS_ID = 'more_dots'
|
GITLAB_CREDENTIALS_ID = 'git-ipc'
|
||||||
|
|
||||||
// 新镜像仓库配置 (10.128.62.130:8843)
|
// 镜像仓库配置 (10.128.62.130:8843)
|
||||||
REGISTRY_URL = '10.128.62.130:8843'
|
REGISTRY_URL = '10.128.62.130:8843'
|
||||||
REGISTRY_CREDENTIALS_ID = 'docker-registry-130'
|
REGISTRY_CREDENTIALS_ID = 'docker-registry-130'
|
||||||
|
|
||||||
@@ -17,6 +17,8 @@ pipeline {
|
|||||||
|
|
||||||
// 是否跳过构建(运行时赋值)
|
// 是否跳过构建(运行时赋值)
|
||||||
SKIP_BUILD = 'false'
|
SKIP_BUILD = 'false'
|
||||||
|
|
||||||
|
K8S_NAMESPACE = 'more-dots'
|
||||||
}
|
}
|
||||||
|
|
||||||
parameters {
|
parameters {
|
||||||
@@ -72,7 +74,11 @@ pipeline {
|
|||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
dir('more_dots') {
|
dir('more_dots') {
|
||||||
sh "docker build --progress=plain -t ${IMAGE_NAME}:${env.IMAGE_TAG} ."
|
sh """
|
||||||
|
docker build --progress=plain \
|
||||||
|
--build-arg PIP_OPTIONS="--no-hash-check" \
|
||||||
|
-t ${IMAGE_NAME}:${env.IMAGE_TAG} .
|
||||||
|
"""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -111,124 +117,21 @@ pipeline {
|
|||||||
|
|
||||||
stage('Deploy to k3s') {
|
stage('Deploy to k3s') {
|
||||||
steps {
|
steps {
|
||||||
dir('more_dots') {
|
|
||||||
script {
|
script {
|
||||||
def cluster = params.TARGET_CLUSTER
|
// 检查 k8s 配置文件是否存在
|
||||||
|
if (!fileExists('more_dots/k8s/deployment.yaml')) {
|
||||||
|
error "错误: more_dots/k8s/deployment.yaml 文件不存在于代码仓库中"
|
||||||
|
}
|
||||||
|
|
||||||
def fullImageWithTag = "${FULL_IMAGE_NAME}:${env.IMAGE_TAG}"
|
def fullImageWithTag = "${FULL_IMAGE_NAME}:${env.IMAGE_TAG}"
|
||||||
|
def cluster = params.TARGET_CLUSTER
|
||||||
|
|
||||||
if (cluster == 'cluster1' || cluster == 'both') {
|
if (cluster == 'cluster1' || cluster == 'both') {
|
||||||
withCredentials([
|
deployToCluster('k3s-cluster1-config', fullImageWithTag, params.DEPLOY_ENV)
|
||||||
file(credentialsId: 'k3s-cluster1-config', variable: 'KUBECONFIG_CLUSTER1'),
|
|
||||||
usernamePassword(credentialsId: REGISTRY_CREDENTIALS_ID, usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PASS')
|
|
||||||
]) {
|
|
||||||
sh """
|
|
||||||
set -eux
|
|
||||||
|
|
||||||
# 查找kubectl路径
|
|
||||||
KUBECTL_PATH=\$(command -v kubectl 2>/dev/null || true)
|
|
||||||
if [ -z "\$KUBECTL_PATH" ]; then
|
|
||||||
for p in /usr/local/bin/kubectl /usr/bin/kubectl /bin/kubectl; do
|
|
||||||
if [ -x "\$p" ]; then
|
|
||||||
KUBECTL_PATH="\$p"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "\$KUBECTL_PATH" ]; then
|
|
||||||
echo "kubectl 未找到,请检查 Jenkins 节点环境"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "使用kubectl路径: \$KUBECTL_PATH"
|
|
||||||
|
|
||||||
# 定义kubectl函数
|
|
||||||
k() {
|
|
||||||
sudo \$KUBECTL_PATH --kubeconfig=${KUBECONFIG_CLUSTER1} "\$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
# 检查命名空间
|
|
||||||
k get namespace ${params.DEPLOY_ENV} || k create namespace ${params.DEPLOY_ENV}
|
|
||||||
|
|
||||||
# 创建imagePullSecret
|
|
||||||
k create secret docker-registry regcred-130 \\
|
|
||||||
--docker-server=${REGISTRY_URL} \\
|
|
||||||
--docker-username=${REGISTRY_USER} \\
|
|
||||||
--docker-password=${REGISTRY_PASS} \\
|
|
||||||
--namespace=${params.DEPLOY_ENV} \\
|
|
||||||
--dry-run=client -o yaml | k apply -f -
|
|
||||||
|
|
||||||
# 替换镜像并部署
|
|
||||||
sed "s|image:.*python-app.*|image: ${fullImageWithTag}|g" k8s/deployment.yaml > /tmp/deployment-${params.DEPLOY_ENV}.yaml
|
|
||||||
k apply -f /tmp/deployment-${params.DEPLOY_ENV}.yaml -n ${params.DEPLOY_ENV}
|
|
||||||
|
|
||||||
# 确保使用imagePullSecret
|
|
||||||
k patch deployment python-app -n ${params.DEPLOY_ENV} \\
|
|
||||||
-p '{"spec":{"template":{"spec":{"imagePullSecrets":[{"name":"regcred-130"}]}}}}' || true
|
|
||||||
|
|
||||||
# 重启并等待
|
|
||||||
k rollout restart deployment/python-app -n ${params.DEPLOY_ENV} 2>/dev/null || true
|
|
||||||
k rollout status deployment/python-app -n ${params.DEPLOY_ENV} --timeout=300s
|
|
||||||
"""
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cluster == 'cluster2' || cluster == 'both') {
|
if (cluster == 'cluster2' || cluster == 'both') {
|
||||||
withCredentials([
|
deployToCluster('k3s-cluster2-config', fullImageWithTag, params.DEPLOY_ENV)
|
||||||
file(credentialsId: 'k3s-cluster2-config', variable: 'KUBECONFIG_CLUSTER2'),
|
|
||||||
usernamePassword(credentialsId: REGISTRY_CREDENTIALS_ID, usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PASS')
|
|
||||||
]) {
|
|
||||||
sh """
|
|
||||||
set -eux
|
|
||||||
|
|
||||||
# 查找kubectl路径
|
|
||||||
KUBECTL_PATH=\$(command -v kubectl 2>/dev/null || true)
|
|
||||||
if [ -z "\$KUBECTL_PATH" ]; then
|
|
||||||
for p in /usr/local/bin/kubectl /usr/bin/kubectl /bin/kubectl; do
|
|
||||||
if [ -x "\$p" ]; then
|
|
||||||
KUBECTL_PATH="\$p"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "\$KUBECTL_PATH" ]; then
|
|
||||||
echo "kubectl 未找到,请检查 Jenkins 节点环境"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "使用kubectl路径: \$KUBECTL_PATH"
|
|
||||||
|
|
||||||
# 定义kubectl函数
|
|
||||||
k() {
|
|
||||||
sudo \$KUBECTL_PATH --kubeconfig=${KUBECONFIG_CLUSTER2} "\$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
# 检查命名空间
|
|
||||||
k get namespace ${params.DEPLOY_ENV} || k create namespace ${params.DEPLOY_ENV}
|
|
||||||
|
|
||||||
# 创建imagePullSecret
|
|
||||||
k create secret docker-registry regcred-130 \\
|
|
||||||
--docker-server=${REGISTRY_URL} \\
|
|
||||||
--docker-username=${REGISTRY_USER} \\
|
|
||||||
--docker-password=${REGISTRY_PASS} \\
|
|
||||||
--namespace=${params.DEPLOY_ENV} \\
|
|
||||||
--dry-run=client -o yaml | k apply -f -
|
|
||||||
|
|
||||||
# 替换镜像并部署
|
|
||||||
sed "s|image:.*python-app.*|image: ${fullImageWithTag}|g" k8s/deployment.yaml > /tmp/deployment-${params.DEPLOY_ENV}.yaml
|
|
||||||
k apply -f /tmp/deployment-${params.DEPLOY_ENV}.yaml -n ${params.DEPLOY_ENV}
|
|
||||||
|
|
||||||
# 确保使用imagePullSecret
|
|
||||||
k patch deployment python-app -n ${params.DEPLOY_ENV} \\
|
|
||||||
-p '{"spec":{"template":{"spec":{"imagePullSecrets":[{"name":"regcred-130"}]}}}}' || true
|
|
||||||
|
|
||||||
# 重启并等待
|
|
||||||
k rollout restart deployment/python-app -n ${params.DEPLOY_ENV} 2>/dev/null || true
|
|
||||||
k rollout status deployment/python-app -n ${params.DEPLOY_ENV} --timeout=300s
|
|
||||||
"""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -247,9 +150,82 @@ 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 "目标集群: ${params.TARGET_CLUSTER}"
|
||||||
}
|
}
|
||||||
failure {
|
failure {
|
||||||
echo "构建失败,请检查日志"
|
echo "构建失败,请检查日志"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 部署函数
|
||||||
|
def deployToCluster(String clusterConfigId, String fullImageWithTag, String deployEnv) {
|
||||||
|
withCredentials([
|
||||||
|
file(credentialsId: clusterConfigId, variable: 'KUBECONFIG'),
|
||||||
|
usernamePassword(credentialsId: REGISTRY_CREDENTIALS_ID,
|
||||||
|
usernameVariable: 'REGISTRY_USER',
|
||||||
|
passwordVariable: 'REGISTRY_PASS')
|
||||||
|
]) {
|
||||||
|
sh """
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
# 查找kubectl路径
|
||||||
|
KUBECTL_PATH=\$(command -v kubectl 2>/dev/null || true)
|
||||||
|
if [ -z "\$KUBECTL_PATH" ]; then
|
||||||
|
for p in /usr/local/bin/kubectl /usr/bin/kubectl /bin/kubectl; do
|
||||||
|
if [ -x "\$p" ]; then
|
||||||
|
KUBECTL_PATH="\$p"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "\$KUBECTL_PATH" ]; then
|
||||||
|
echo "kubectl 未找到,请检查 Jenkins 节点环境"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "使用kubectl路径: \$KUBECTL_PATH"
|
||||||
|
echo "部署到集群: ${clusterConfigId}"
|
||||||
|
echo "部署环境: ${deployEnv}"
|
||||||
|
echo "镜像: ${fullImageWithTag}"
|
||||||
|
echo "命名空间: ${K8S_NAMESPACE}"
|
||||||
|
|
||||||
|
# 定义kubectl函数
|
||||||
|
k() {
|
||||||
|
sudo \$KUBECTL_PATH --kubeconfig=${KUBECONFIG} "\$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查命名空间
|
||||||
|
k get namespace ${K8S_NAMESPACE} || k create namespace ${K8S_NAMESPACE}
|
||||||
|
|
||||||
|
# 创建imagePullSecret
|
||||||
|
k create secret docker-registry regcred-130 \\
|
||||||
|
--docker-server=${REGISTRY_URL} \\
|
||||||
|
--docker-username=${REGISTRY_USER} \\
|
||||||
|
--docker-password=${REGISTRY_PASS} \\
|
||||||
|
--namespace=${K8S_NAMESPACE} \\
|
||||||
|
--dry-run=client -o yaml | k apply -f -
|
||||||
|
|
||||||
|
# 替换镜像标签和环境变量并部署
|
||||||
|
sed -e "s|image:.*more_dots:.*|image: ${fullImageWithTag}|g" \\
|
||||||
|
-e "s|value: \".*\"|value: \"${deployEnv}\"|g" \\
|
||||||
|
more_dots/k8s/deployment.yaml > /tmp/deployment-${K8S_NAMESPACE}.yaml
|
||||||
|
|
||||||
|
echo "部署配置:"
|
||||||
|
cat /tmp/deployment-${K8S_NAMESPACE}.yaml
|
||||||
|
|
||||||
|
# 应用配置到 more-dots 命名空间
|
||||||
|
k apply -f /tmp/deployment-${K8S_NAMESPACE}.yaml -n ${K8S_NAMESPACE}
|
||||||
|
|
||||||
|
# 等待部署完成
|
||||||
|
echo "等待部署完成..."
|
||||||
|
k rollout status deployment/more-dots -n ${K8S_NAMESPACE} --timeout=300s
|
||||||
|
|
||||||
|
# 显示部署状态
|
||||||
|
echo "部署完成,查看pod状态:"
|
||||||
|
k get pods -n ${K8S_NAMESPACE} -l app=more-dots
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user