pipeline {
agent any
// 定义一些可以在整个pipeline中使用的变量
environment {
// 可以使用 Jenkins 密钥管理中的凭据
DOCKER_IMAGE = 'my-app-image'
DOCKER_REGISTRY_CREDENTIALS_ID = 'my-docker-registry-credentials'
}
stages {
stage('代码拉取') {
steps {
echo '代码拉取'
// 不进行ssl验证
sh 'git -c http.sslVerify=false clone https://192.168.73.30/gaohaixiang/lowcode.git'
}
}
stage('构建并测试') {
parallel {
stage('后端构建') {
steps {
dir('lowcode') {
echo 'Building and Testing Backend'
//sh './gradlew build'
}
}
}
stage('前端构建') {
steps {
dir('frontend') {
echo 'Building and Testing Frontend'
//sh 'npm install && npm test'
}
}
}
}
}
stage('构建容器镜像') {
steps {
script {
//docker.build("${DOCKER_IMAGE}:${env.BUILD_NUMBER}")
echo 'docker.build("${DOCKER_IMAGE}:${env.BUILD_NUMBER}")'
}
}
}
stage('推送容器镜像') {
steps {
script {
echo 'Push Docker Image'
//docker.withRegistry('https://registry.hub.docker.com', DOCKER_REGISTRY_CREDENTIALS_ID) {
// docker.image("${DOCKER_IMAGE}:${env.BUILD_NUMBER}").push()
//}
}
}
}
stage('部署到测试') {
steps {
echo 'Deploying to Staging Environment'
// 使用脚本部署到暂存环境
//sh 'kubectl apply -f k8s/staging'
}
}
stage('部署生产审批') {
when {
branch 'main'
}
steps {
input 'Deploy to Production?'
}
}
stage('部署到生产') {
when {
branch 'main'
}
steps {
script {
// 尝试部署到生产环境
try {
echo 'Deploying to Production Environment'
//sh 'kubectl apply -f k8s/production'
// 假设这里有一个检查部署成功的步骤
// 如果部署失败,它将抛出一个异常
} catch (Exception e) {
// 如果部署失败,执行回滚
echo "Deployment failed! Attempting rollback..."
//sh 'kubectl rollout undo deployment/my-app'
// 抛出异常以确保该阶段标记为失败
throw e
}
}
}
}
}
post {
always {
echo '这个消息总是会打印'
}
success {
echo '构建成功!'
// 可以在这里添加发送成功通知的步骤
}
failure {
echo '构建失败了!'
// 可以在这里添加发送失败通知的步骤
}
unstable {
echo '构建不稳定!'
}
changed {
echo '构建状态发生了变化。'
}
fixed {
echo '之前失败的构建现在修复了。'
}
regression {
echo '构建状态比之前更差了。'
}
aborted {
echo '构建被中断。'
}
cleanup {
echo '执行清理步骤。'
// 清理工作,例如删除临时文件或者释放资源
cleanWs()
}
}
}
// 定义一个通知函数
def notify(String message) {
echo "Sending notification: ${message}"
// 这里可以集成邮件通知、Slack、Teams 等
}