移動端網(wǎng)站建設(shè)費(fèi)用軟件開發(fā)
實(shí)現(xiàn)代碼打包編譯
容器鏡像構(gòu)建
jenkins編譯采用docker構(gòu)建。
遇到問題:
1.需要限制docker 容器的內(nèi)存和cpu
docker {
image ‘ccr.ccs.tencentyun.com/libary/maven:3.6.3-jdk-8’
args “-v ${WORKSPACE}:/workspace --memory=‘2048m’ --cpus=‘1’”
}
2.jenkins構(gòu)建需要限制構(gòu)建時間。避免job任務(wù)構(gòu)建時間太長
timeout(time: 30, unit: ‘MINUTES’) { //限制30分鐘的構(gòu)建時間。超過30分鐘自動斷開
pipeline {agent anyparameters {choice(name: 'GIT_BUILD_REF',choices: ['test', 'master'],description: 'Select the Git branch or commit to build')}environment {GIT_REPO_URL = "http://192.168.1.2/djb/djb-cloud.git"HARBOR_REGISTRY = "192.168.2.1:5000"HARBOR_HOST= "example.com"DOCKER_BUILD_CONTEXT = './module-system/djb-module-system-biz'CODING_DOCKER_IMAGE_NAME = 'ops/djb-module-system'DOCKERFILE_PATH = './module-system/djb-module-system-biz/Dockerfile'HARBOR_CREDENTIALS_ID = "fd3362aa-xx" //憑據(jù)idCREDENTIALS_ID = "0ee6d913-xxx"DEPLOYMENT_NAME = "djb-module-system-deploy"CONTAINER_NAME = "djb-module-system-deploy"WEBHOOK_URL ="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx123"}stages {stage('檢出') {steps {checkout([$class: 'GitSCM',branches: [[name: "${params.GIT_BUILD_REF}"]],userRemoteConfigs: [[url: "${env.GIT_REPO_URL}",credentialsId: "${env.CREDENTIALS_ID}"]]])script {// 獲取當(dāng)前的Git提交IDenv.GIT_COMMIT_ID = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()// 獲取當(dāng)前時間env.CURRENT_TIME = sh(script: 'date +%Y%m%d%H%M%S', returnStdout: true).trim()// 生成版本號env.DOCKER_IMAGE_VERSION = "${params.GIT_BUILD_REF}-${env.GIT_COMMIT_ID}-${env.CURRENT_TIME}"} }}stage('build') {agent {docker {image 'ccr.ccs.tencentyun.com/libary/maven:3.6.3-jdk-8'args "-v ${WORKSPACE}:/workspace --memory='2048m' --cpus='1'"}}steps {script {timeout(time: 30, unit: 'MINUTES') {sh "cd /workspace && ls -l"sh 'pwd'sh "ls -l && mvn -v"sh 'cd /workspace && pwd && mvn clean package -Dmaven.test.skip=true'}} }}stage('構(gòu)建鏡像并推送到 Harbor Docker 制品庫') {steps {script {// 使用 withRegistry 來處理 HTTP 登錄docker.withRegistry("https://${env.HARBOR_REGISTRY}", "${env.HARBOR_CREDENTIALS_ID}") {def dockerImage = docker.build("${env.CODING_DOCKER_IMAGE_NAME}:${env.DOCKER_IMAGE_VERSION}", "-f ${env.DOCKERFILE_PATH} ${env.DOCKER_BUILD_CONTEXT}")dockerImage.push()env.IMAGE_NAME = "${env.HARBOR_HOST}/${env.CODING_DOCKER_IMAGE_NAME}:${env.DOCKER_IMAGE_VERSION}" }}}}stage('部署到 Kubernetes') {when {expression { return params.GIT_BUILD_REF == 'test' }}steps {script {// 使用 withKubeConfig 來處理 Kubernetes 配置withKubeConfig(credentialsId: 'tke-cluster-credentials') {sh "kubectl set image deployment/${env.DEPLOYMENT_NAME} ${env.CONTAINER_NAME}=${env.IMAGE_NAME} --record"}}}}}post {success {script {def message = """{"msgtype": "text","text": {"content": "Jenkins 部署成功!\\n部署鏡像號: ${env.IMAGE_NAME}\\n部署狀態(tài):\\n${env.DEPLOYMENT_NAME}:成功"}}"""sh """curl -X POST ${WEBHOOK_URL} \-H 'Content-Type: application/json' \-d '${message}'"""}}failure {script {def message = """{"msgtype": "text","text": {"content": "Jenkins 部署失敗!\\n部署鏡像號: ${env.IMAGE_NAME}\\n部署狀態(tài):\\n${env.DEPLOYMENT_NAME}:失敗"}}"""sh """curl -X POST ${WEBHOOK_URL} \-H 'Content-Type: application/json' \-d '${message}'"""}}}
}