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" } }
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" } }
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('"', '"') 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}"}' """ } } } }