jenkinsfile

k8s集群中用的jenkinsfile部署

java后台项目

# x项目 test-java-eladmin-ci

// harbor镜像仓库地址和密码信息
def registry = "harbor.solomon.com"
// jenkins中定义的连接harbor的用户名密码凭据
def registry_se = "d2318c77-8a32-4618-bced-d6cabb0454b4"
 
 
// gitlab地址和密码信息
def gitlab_url = "http://192.168.17.18/java/eladmin.git"
// jenkins中定义git连接gitlab的密码凭据
def gitlab_se = "6e58036d-21ad-42b4-a8d2-50fb700f92c7"
 
 
// jenkins中k8s-api 连线k8s集群的凭据信息
// jenkins中Config File provice插件定义的kubeconfig的内容
def k8s_auth = "782d66a2-d207-4398-b823-786b999db338"
 
 
// k8s连接harbor的证书(kubectl命令离开k8s集群时需要,例如目前的jenkins环境)
def secret_name = "registry-pull-secret"
 
// harbor仓库的项目前缀信息
def prefix = "library"
 
 
// 部署应用的服务名称
def app_name = "access-ultra-vires"
// 部署服务所在的命名空间、副本数、容器暴露的端口、svc的端口
def ns = "default"
def rc = 3
def cport = 8008 
def cluport = 8008 
// 构建编译的环境参数
def env = "default"
 
 
node(){
  stage("1.pull git code"){
    checkout([$class: 'GitSCM', branches: [[name: '*/dev']], userRemoteConfigs: [[credentialsId: "${gitlab_se}", url: "${gitlab_url}"]]]) 
        script {
            build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
            TM = sh(script: 'date +%Y%m%d%H%M')
        }
        image_name_build = "${registry}/${prefix}/${app_name}:${BUILD_NUMBER}"
        image_name_latest = "${registry}/${prefix}/${app_name}:latest"
         
  }
 
  stage("2.build code"){
      sh "mvn clean package -P${env} -DskipTests"
  }
  stage("3.build docker and push to harbor") {
        withCredentials([usernamePassword(credentialsId: "${registry_se}", passwordVariable: 'dockerHubPassword', usernameVariable: 'dockerHubUser')]) {
            sh "docker login -u ${dockerHubUser} -p ${dockerHubPassword} ${registry}"
            sh "docker build -t ${image_name_build}  -f Dockerfile .  --no-cache"
            sh "docker tag ${image_name_build} ${image_name_latest}"
            sh "docker push ${image_name_build}"
            sh "docker push ${image_name_latest}"
        }
    }
  stage("4.deploy to k8s") {
        // sh "/usr/bin/ossutil cp -uf oss://prod-***/api/blue/templete-v1.yaml templete-v1.yaml"
        sh "cp templete-v1.yaml ${app_name}-dep.yaml"
        sh "sed -i 's#SVC_NAME#${app_name}#g'  ${app_name}-dep.yaml"
        sh "sed -i 's#NS_NAME#${ns}#g'  ${app_name}-dep.yaml"
        sh "sed -i 's#RC_NUM#${rc}#g'  ${app_name}-dep.yaml"
        sh "sed -i 's#IMAGE_URL#${image_name_latest}#g'  ${app_name}-dep.yaml"
        sh "sed -i 's#CON_PORT#${cport}#g'  ${app_name}-dep.yaml"
        sh "sed -i 's#CLU_PORT#${cluport}#g'  ${app_name}-dep.yaml"
        sh "kubectl apply -f  ${app_name}-dep.yaml"
        echo "deploy success"
    }
}
View Code

 

vue前端项目

# 项目 vue-test-ci
// harbor镜像仓库地址和密码信息
def registry = "harbor.solomon.com"
// jenkins中定义的连接harbor的用户名密码凭据
def registry_se = "d2318c77-8a32-4618-bced-d6cabb0454b4"
 
 
// gitlab地址和密码信息
def gitlab_url = "http://192.168.17.18/vue/eladmin-web.git"
// jenkins中定义git连接gitlab的密码凭据
def gitlab_se = "6e58036d-21ad-42b4-a8d2-50fb700f92c7"
 
 
// jenkins中k8s-api 连线k8s集群的凭据信息
// jenkins中Config File provice插件定义的kubeconfig的内容
def k8s_auth = "782d66a2-d207-4398-b823-786b999db338"
 
 
// k8s连接harbor的证书(kubectl命令离开k8s集群时需要,例如目前的jenkins环境)
def secret_name = "registry-pull-secret"
 
 
// harbor仓库的项目前缀信息
def prefix = "library"
 
 
// 部署应用的服务名称
def app_name = "eladmin-web"
// 部署服务所在的命名空间、副本数、容器暴露的端口、svc的端口
def ns = "default"
def rc = 3
def cport = 80
def cluport = 80 
// 构建编译的环境参数
def env = "default"
 
 
node(){
  stage("1.pull git code"){
    checkout([$class: 'GitSCM', branches: [[name: '*/main']], userRemoteConfigs: [[credentialsId: "${gitlab_se}", url: "${gitlab_url}"]]]) 
        script {
            build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
            TM = sh(script: 'date +%Y%m%d%H%M')
        }
        image_name_build = "${registry}/${prefix}/${app_name}:${BUILD_NUMBER}"
        image_name_latest = "${registry}/${prefix}/${app_name}:latest"
         
  }
 
  stage("2.run build"){
      nodejs("npm"){
          sh("node -v && npm -v")
          sh("npm install")
          sh("npm run build:prod")
          sh("tar zcvf dist.tar.gz dist")
      }
  }
    stage("3.build docker and push to harbor") {
        withCredentials([usernamePassword(credentialsId: "${registry_se}", passwordVariable: 'dockerHubPassword', usernameVariable: 'dockerHubUser')]) {
            sh "docker login -u ${dockerHubUser} -p ${dockerHubPassword} ${registry}"
            sh "docker build -t ${image_name_build}  -f Dockerfile .  --no-cache"
            sh "docker tag ${image_name_build} ${image_name_latest}"
            sh "docker push ${image_name_build}"
            sh "docker push ${image_name_latest}"
            // 删除压缩包,等待下次构建
            sh "rm -f dist.tar.gz"
        }
    }
  stage("4.deploy to k8s") {
        sh "cp templete-v1.yaml ${app_name}-dep.yaml"
        sh "sed -i 's#SVC_NAME#${app_name}#g'  ${app_name}-dep.yaml"
        sh "sed -i 's#NS_NAME#${ns}#g'  ${app_name}-dep.yaml"
        sh "sed -i 's#RC_NUM#${rc}#g'  ${app_name}-dep.yaml"
        sh "sed -i 's#IMAGE_URL#${image_name_latest}#g'  ${app_name}-dep.yaml"
        sh "sed -i 's#CON_PORT#${cport}#g'  ${app_name}-dep.yaml"
        sh "sed -i 's#CLU_PORT#${cluport}#g'  ${app_name}-dep.yaml"
        sh "kubectl apply -f  ${app_name}-dep.yaml"
        echo "deploy success"
    }
  
}
View Code

 

php项目

Deleted Account, [2024/11/26 18:34]
pipeline {
    agent { label 'local-node' }
    environment { DATETIME_TAG = sh(script: "date +'%Y%m%d%H%M'", returnStdout: true).trim() }
    parameters {
        string(name: 'MESSAGE_ID', defaultValue: '', description: 'Message ID parameter')
    }
    stages {
        stage('拉取代码') {
            steps {
                script {
                    // 使用 GitSCM 插件拉取代码并更新子模块
                    checkout([
                        $class: 'GitSCM',
                        branches: [[name: '*/yihao_online']], // 指定要拉取的分支
                        userRemoteConfigs: [[
                            url: 'http://git.gooogt.com:9980/Gray/site.group.admin.yihao.git', // 指定仓库的 URL
                            credentialsId: 'e1a131d9-0c25-42de-8db7-3f7f685ef40f' // 指定密钥
                        ]],
                        extensions: [
                            // 启用子模块的递归更新
                            [$class: 'SubmoduleOption',
                             recursiveSubmodules: true,
                             reference: '',
                             trackingSubmodules: false,
                             timeout: 10, // 可选,设置超时(分钟)
                             parentCredentials: true // 可选,使用父仓库的凭证
                            ]
                        ]
                    ])
                }
            }
        }
        stage('清理及打包') {
            steps {
                script {
                    // 清理之前打包的代码、配置文件、dockerfile
                    sh '''
                    rm -rf admin-api.tar.gz
                    rm -rf conf
                    rm -rf Dockerfile
                    '''
                    // 下载vendoer并解压
                    sh '''
                    wget http://git.77devops.com:9980/lwang/cg-config/-/raw/main/800/admin/vendor.tar.gz
                    tar xf vendor.tar.gz
                    rm -rf vendor.tar.gz
                    '''
                    // 打包构建结果
                    sh '''
                    tar -zcf admin-api.tar.gz *
                    '''
                }
            }
        }
        stage('下载配置') {
            steps {
                script {
                    // 下载配置和vendor
                    sh '''
                    mkdir conf
                    wget http://git.77devops.com:9980/lwang/cg-config/-/raw/main/800/admin/env -P conf/
                    wget http://git.77devops.com:9980/lwang/cg-config/-/raw/main/800/admin/admin.conf -P conf/
                    wget http://git.77devops.com:9980/lwang/cg-config/-/raw/main/800/admin/fastcgi.conf -P conf/
                    wget http://git.77devops.com:9980/lwang/cg-config/-/raw/main/800/admin/nginx.conf -P conf/
                    wget http://git.77devops.com:9980/lwang/cg-config/-/raw/main/800/admin/php-fpm.conf -P conf/
                    wget http://git.77devops.com:9980/lwang/cg-config/-/raw/main/800/admin/php.ini -P conf/
                    wget http://git.77devops.com:9980/lwang/cg-config/-/raw/main/800/admin/start.sh -P conf/
                    wget http://git.77devops.com:9980/lwang/cg-config/-/raw/main/800/admin/thirdgame.php -P conf/
                    wget http://git.77devops.com:9980/lwang/pak/raw/master/yihao/admin/database.php -P conf/
                    '''
                }
            }
        }
        stage('编译推送镜像') {
            steps {
                script {
                    sh '''
                    cat > Dockerfile <<EOF
FROM harbor.77devops.com/source/ngx_php74_swoole_ampq_redis_gmp_curl_skywalking:v1
ENV TZ='Asia/Shanghai'
WORKDIR /home/wwwroot
ADD admin-api.tar.gz /home/wwwroot
COPY conf/admin.conf /usr/local/nginx/conf/vhost/admin.conf
COPY conf/env /home/wwwroot/.env
COPY conf/fastcgi.conf /usr/local/nginx/conf/fastcgi.conf
COPY conf/nginx.conf /usr/local/nginx/conf/nginx.conf
COPY conf/php-fpm.conf /usr/local/php/etc/php-fpm.conf
COPY conf/php.ini /usr/local/php/etc/php.ini
COPY conf/start.sh /start.sh
COPY conf/thirdgame.php /home/wwwroot/config/thirdgame.php
COPY conf/database.php /home/wwwroot/config/database.php
RUN rm -rf /home/wwwroot/default
RUN find /home/wwwroot/* -type d -exec chmod 755 {} \\; && find /home/wwwroot/* -type f -exec chmod 644 {} \\; && chown 1000:1000 /home/wwwroot/* -R
CMD ["sh", "/start.sh"]'''
                    sh '''
                    docker build . -t harbor.77devops.com/cg/cg-800-admin-api:latest
                    docker push harbor.77devops.com/cg/cg-800-admin-api:latest
                    docker tag harbor.77devops.com/cg/cg-800-admin-api:latest harbor.77devops.com/cg/cg-800-admin-api:$DATETIME_TAG
                    docker push harbor.77devops.com/cg/cg-800-admin-api:$DATETIME_TAG
                    docker rmi harbor.77devops.com/cg/cg-800-admin-api:latest harbor.77devops.com/cg/cg-800-admin-api:$DATETIME_TAG
                    '''
                }
            }
        }
        stage('重启pod') {
            steps {
                script {
                    sh '''
                    kubectl --kubeconfig /root/.kube_ziyingxi/config rollout restart deploy/yihao-800-admin-api --namespace 800
                    kubectl --kubeconfig /root/.kube_ziyingxi/config rollout restart deploy/yihao-800-admin-proxy-pay --namespace 800
                    '''
                }
            }
        }
        stage('发送TG通知') {
    steps {
        script {
            def messageId = params.MESSAGE_ID ?: '' // 确保 messageId 存在
            wrap([$class: 'BuildUser']) {
                def g_id = "-4258520610"
                def description = sh(script: "git log --pretty=%s -1", returnStdout: true).trim().replaceAll('"', '&quot;')
                def gitBranch = sh(script: "git name-rev --name-only HEAD", returnStdout: true).trim()
                def msg = "项目:${env.JOB_NAME}\n构建者:${env.BUILD_USER}\n构建编号:${env.BUILD_ID}\n构建分支:${gitBranch}\n描述:${description}"

                // 使用 JsonOutput 来生成 JSON
                def data = groovy.json.JsonOutput.toJson([
                    chat_id   : g_id,
                    message_id: messageId,
                    new_text  : msg
                ])

                // 发送Telegram通知
                sh """
                curl -sX POST http://18.163.252.174:5000/callback \
                -H "Content-Type: application/json" \
                -d '${data}'
                """
                    }
                }
            }
        }
    }
post {
        failure {
            script {
                def g_id = "-4258520610"
                def messageId = params.MESSAGE_ID ?: ''
                def msg = "构建失败:${env.JOB_NAME} 构建编号:${env.BUILD_ID}"

         
                sh """
                curl -sX POST http://18.163.252.174:5000/callback \
                -H "Content-Type: application/json" \
                -d '{"chat_id": "${g_id}", "message_id": "${message_id}", "new_text": "${msg}"}'
                """
            }
        }
    }
}

 

posted @ 2024-11-16 12:15  solomon123  阅读(12)  评论(0编辑  收藏  举报