企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[链接](https://mp.weixin.qq.com/s/VjL2UuVsUCvF4R6Ul6VioA) [链接](https://www.w3cschool.cn/jenkins/jenkins-173a28n4.html) 本文基于`docker`🐳+`nginx`+`jenkins`来实现前端自动化部署流程, 具体实现效果为开发人员在本地开发,开发push提交代码到指定分支, 😊自动触发jenkins进行持续集成和自动化部署。部署完成后会收到邮件的通知, 构建成功后会将打包后的文件上传到服务器,通过`nginx`反向代理展现页面。构建失败则打印出错误日志。 #### CICD 持续集成(Continuous Integration, CI): 代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈。 持续部署(Continuous Deployment, CD): 部署到测试环境、预生产环境/灰度环境、生产环境。 持续交付(Continuous Delivery, CD): 将最终产品发布到生产环境、给用户使用 ## **k8s+docker部署jenkins+gitlab实现CICD** - Jinkens - sonarqube https://juejin.cn/post/6999801358798831647 拉取指定分支的代码 --》 编译打包 --》 Docker 镜像制作 --》 部署服务到K8S - pipeline 脚本 agent: job运行的slave或者master节点 ; 一个agent可以拥有多个标签( 工具链--jdk, node; 操作系统),agent放在pipeline的顶层或stage中 environment: 定义一些环境变量; stages -- stage -- steps -- script : 一个stages可以有多个stage ```shell pipeline { agent { node { label 'node02' } } environment { DW_DOCKER_HOST = "100.76.2.52" DEPLOY_HOST = "100.73.10.49" DW_TAG_TIME = sh(script: 'date +%Y%m%d%H%M%S | tr -d \'\n\'', returnStdout: true) DW_IMAGE_NAME = "${PROJECT_NAME}:ci-${env.DW_TAG_TIME}" DW_IMAGE_FULLNAME = "registry.paas/cmss/${env.DW_IMAGE_NAME}" DW_IMAGE_BUILD = "/data/CICD/images/${PROJECT_NAME}" DW_IMAGE_SAVE = "/data/CICD/images/images-save" K8S_YAML_PATH= "/apps/deployer/yamls/service/epic-deepwatch-vue.yaml" } options{ timeout(30) buildDiscarder logRotator(artifactDaysToKeepStr: '15', artifactNumToKeepStr: '2', daysToKeepStr: '60', numToKeepStr: '10') } stages { stage('下载代码') { steps { checkout([$class: 'GitSCM', branches: [[name: '${BRANCH}']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanCheckout']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'gerrit-code-clone', url: '${SCM_ADDRESS}']]]) } } stage('编译打包') { steps { sh ''' export PATH=$PATH:/usr/local/bin ls -lh cd $WORKSPACE/bc-deepwatch-vue node -v cnpm install npm run build:prod ''' } } stage('Docker镜像制作') { environment { GIT_REVISION = sh(script: 'git rev-parse HEAD', returnStdout: true) } steps { sh ''' ssh ${DW_DOCKER_HOST} rm -rf ${DW_IMAGE_BUILD} ssh ${DW_DOCKER_HOST} mkdir -p ${DW_IMAGE_BUILD} scp -r ./bc-deepwatch-vue/dist root@${DW_DOCKER_HOST}:${DW_IMAGE_BUILD} scp ./Dockerfile root@${DW_DOCKER_HOST}:${DW_IMAGE_BUILD} ssh ${DW_DOCKER_HOST} docker rmi -f ${DW_IMAGE_FULLNAME} echo ${DW_IMAGE_FULLNAME} ssh ${DW_DOCKER_HOST} "cd ${DW_IMAGE_BUILD}; docker build -t ${DW_IMAGE_FULLNAME} ." ssh ${DW_DOCKER_HOST} docker push ${DW_IMAGE_FULLNAME} ssh ${DW_DOCKER_HOST} mkdir -p ${DW_IMAGE_SAVE} ssh ${DW_DOCKER_HOST} "cd ${DW_IMAGE_SAVE}; docker save ${DW_IMAGE_FULLNAME} | gzip > ${DW_IMAGE_NAME}.tar.gz" ''' } } stage('部署服务到K8S') { steps { script { sh ''' echo "部属服务 ${PROJECT_NAME} 到服务器 ${DEPLOY_HOST}" # scp ${path}/${K8S_YAML_NAME} root@${DEPLOY_HOST}:${K8S_YAML_PATH} ssh ${DEPLOY_HOST} "sed -ie 's#image.*#image: ${DW_IMAGE_FULLNAME}#g' ${K8S_YAML_PATH}" ''' try { sh "ssh ${DEPLOY_HOST} /apps/bin/kubectl delete -f ${K8S_YAML_PATH}" } catch (e) { echo "${PROJECT_NAME}服务可能不存在" } sh "ssh ${DEPLOY_HOST} /apps/bin/kubectl create -f ${K8S_YAML_PATH}" } } } } } ```