pipeline { // 直接上k8s,用k8s来管理docker agent { node { label "nodejs" } } parameters { choice( description: "你需要选择哪条分支进行构建?", name: "branch_name", choices: ["master", "feat/youlai_k8s_deploy"] ) } environment { // 自建harbor仓库的namespace docker_hub_namespace = "youlai" // docker_hub_namespace = "youlaiwuhui" web_app_name = "youlai-web-vue3" // 自建镜像仓库地址 docker_hub = "k8s-harbor:30002" // docker_hub = "https://registry.cn-hangzhou.aliyuncs.com" // 在jenknis或kubesphere上面的凭证 docker_hub_id = "youlai-zhangjialin-myself-harbor-account" // docker_hub_id = "zhangjialin-aliyun-pingzheng" // k8s 上面的 namespace k8s_namespace = "youlai-mall" GIT_COMMIT_ID = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim() // BUILD_NUMBER 这个变量从jenkins传递过来 current_build_number = "${BUILD_NUMBER}" // 在k8s上面配置的id KUBECONFIG_CREDENTIAL_ID = "youlai-kubeconfig" } stages { stage ("打印相关变量") { steps{ echo "docker_hub_namespace信息为: ${docker_hub_namespace}" // 获取commit信息,用于后面打tag echo "commit信息为:${env.GIT_COMMIT_ID}" echo "current_build_number信息为:${env.current_build_number}" script { // 本端tag名 env.local_tag = "frontend:${current_build_number}_${GIT_COMMIT_ID}" // 远端tag名,必须以这种方式命令,才能push到远端 env.remote_tag = "${docker_hub}/${docker_hub_namespace}/${local_tag}" echo "local_tag信息为:${env.local_tag}" echo "remote_tag信息为:${env.remote_tag}" } } } stage("checkout代码") { steps { //git branch: "${branch_name}", credentialsId: 'zhangjialin-youlai-mall-pingzheng', url: 'https://gitee.com/youlaitech/youlai-mall.git' //checkout([ //$class: 'GitSCM', //branches: [[name: "${branch_name}"]], //extensions: [[$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true]], //userRemoteConfigs: [[credentialsId: 'zhangjialin-youlai-mall-pingzheng', url: 'https://gitee.com/youlaitech/youlai-mall.git']]]) sh "du -h --max-depth=1" } } stage('构建') { agent none steps { container('nodejs') { script { sh 'yarn config set registry https://registry.npm.taobao.org' sh 'npm config set registry https://registry.npm.taobao.org' sh 'ls -al $WORKSPACE/src/components/TreeSelect' sh 'yarn install --force' sh 'yarn build:prod' } } } } stage('构建镜像') { agent none steps { script { container('nodejs') { sh "pwd && ls -al" sh "docker build -t ${env.local_tag} -f devops/Dockerfile ." withCredentials([usernamePassword(credentialsId: "${docker_hub_id}", passwordVariable: 'DOCKER_PASSWORD', usernameVariable: 'DOCKER_USERNAME')]) { sh 'echo "$DOCKER_PASSWORD" | docker login http://k8s-harbor:30002 -u "$DOCKER_USERNAME" --password-stdin' sh "docker tag ${env.local_tag} ${env.remote_tag}" sh "docker push ${env.remote_tag}" } } } } } stage("自动部署至k8s") { agent none steps { container ("nodejs") { // 这种方式启k8s是官方推荐的 sh 'envsubst < devops/deploy.yaml | kubectl apply -f -' } } } } }