当前位置: 首页 > news >正文

php网站模板免费下载深圳市龙华区平安医院

php网站模板免费下载,深圳市龙华区平安医院,wordpress调用多个标签,金华市住房建设局网站引言 在持续集成的过程中#xff0c;Jenkins Pipeline 是非常关键的一环。它定义了如何自动编译、测试和部署代码。随着项目的不断发展#xff0c;Pipeline 的复杂性也在不断上升#xff0c;这就需要我们持续优化 Pipeline 脚本#xff0c;以提高代码的可读性和维护性。本…引言 在持续集成的过程中Jenkins Pipeline 是非常关键的一环。它定义了如何自动编译、测试和部署代码。随着项目的不断发展Pipeline 的复杂性也在不断上升这就需要我们持续优化 Pipeline 脚本以提高代码的可读性和维护性。本文将介绍一次从繁琐Pipeline脚本到精简Pipeline脚本的转化过程以及这种转化所带来的好处。 原始的 Pipeline 脚本: 注 loader其实已经废弃了 pipeline {agent { label build01 }stages {stage(GetCode){agent { label build01 }steps{script{println(下载代码 -- 分支 ${env.branchName})checkout([$class: GitSCM, branches: [[name: ${env.branchName}]],doGenerateSubmoduleConfigurations: false,extensions: [[$class: CloneOption, depth: 1, noTags: false, reference: , shallow: true]],submoduleCfg: [],userRemoteConfigs: [[credentialsId: xxxxx,url: ${env.gitHttpURL}]]])}}} stage(docker build dataloader-game-ucenter) {agent { label build01 }when {environment name: dataloader, value: true}steps {sh cd dataloaderdocker build --build-arg NODE_ENVgame-ucenter -t swr.cn-north-4.myhuaweicloud.com/master-metaspace/dataloader-game-ucenter:$data .withCredentials([usernamePassword(credentialsId: hw-registry, passwordVariable: dockerPassword, usernameVariable: dockerUser)]) {sh docker login -u ${dockerUser} -p ${dockerPassword} swr.cn-north-4.myhuaweicloud.comsh docker push swr.cn-north-4.myhuaweicloud.com/master-metaspace/dataloader-game-ucenter:$data}}}stage(docker build datawriter-game-ucenter) {agent { label build01 }when {environment name: datawriter, value: true}steps {sh cd datawriter-game-ucenterdocker build --build-arg NODE_ENVgame-ucenter -t swr.cn-north-4.myhuaweicloud.com/master-metaspace/datawriter-game-ucenter:$data .withCredentials([usernamePassword(credentialsId: hw-registry, passwordVariable: dockerPassword, usernameVariable: dockerUser)]) {sh docker login -u ${dockerUser} -p ${dockerPassword} swr.cn-north-4.myhuaweicloud.comsh docker push swr.cn-north-4.myhuaweicloud.com/master-metaspace/datawriter-game-ucenter:$data}}} stage(docker build game-ucenter) {agent { label build01 }when {environment name: game-ucenter, value: true}steps {sh cd game-ucenterdocker build --build-arg NODE_ENVgame-ucenter -t swr.cn-north-4.myhuaweicloud.com/master-metaspace/game-ucenter:$data .withCredentials([usernamePassword(credentialsId: hw-registry, passwordVariable: dockerPassword, usernameVariable: dockerUser)]) {sh docker login -u ${dockerUser} -p ${dockerPassword} swr.cn-north-4.myhuaweicloud.comsh docker push swr.cn-north-4.myhuaweicloud.com/master-metaspace/game-ucenter:$data}}} stage(develop) {parallel {stage(develop datawriter-game-ucenter) {when {environment name: datawriter-game-ucenter, value: true}agent { label huaweiyun-xx }steps {sh sed -e s/{data}/$data/g /home/jenkins/workspace/yaml/master-metaspace/datawriter-game-ucenter.tpl /home/jenkins/workspace/yaml/master-metaspace/datawriter-game-ucenter.yamlsh sudo kubectl apply -f /home/jenkins/workspace/yaml/master-metaspace/datawriter-game-ucenter.yaml --namespacemaster-metaspace --contextmaster}}stage(develop dataloader-game-ucenter) {when {environment name: dataloader, value: true}agent { label huaweiyun-xx }steps {sh sed -e s/{data}/$data/g /home/jenkins/workspace/yaml/master-metaspace/dataloader-game-ucenter.tpl /home/jenkins/workspace/yaml/master-metaspace/dataloader-game-ucenter.yamlsh sudo kubectl apply -f /home/jenkins/workspace/yaml/master-metaspace/dataloader-game-ucenter.yaml --namespacemaster-metaspace --contextmaster}}stage(develop game-ucenter) {when {environment name: game-ucenter, value: true}agent { label huaweiyun-xx }steps {sh sed -e s/{data}/$data/g /home/jenkins/workspace/yaml/master-metaspace/game-ucenter.tpl /home/jenkins/workspace/yaml/master-metaspace/game-ucenter.yamlsh sudo kubectl apply -f /home/jenkins/workspace/yaml/master-metaspace/game-ucenter.yaml --namespacemaster-metaspace --contextmaster}} }}} }在优化之前我们的 Jenkins Pipeline 脚本中包含了多个独立定义的 stage每个 stage 中都有重复的结构和指令 明确指定了 agent。在每个 stage 的 steps 中都使用了类似的脚本来操作 git、构建 docker 镜像和部署到 Kubernetes。使用了冗长的 shell 脚本来绑定变量和执行部署。 这种写法虽然直观但存在以下问题 代码冗余相同的任务例如构建与部署重复编写了多次。低效的修改一旦需要调整构建或部署流程需要同时修改多个类似的代码段。可读性差过于细碎的脚本内容使得新成员阅读和理解这个 Pipeline 变得困难。 转化的原因与过程 简化 agent 的声明 pipeline {agent none // Use none at the top level, each stage will define its own agent.}在原始脚本中每个 stage 都重复指定相同的 agent这是不必要的。转化后我们在 pipeline 的顶层使用 agent none 声明表示不在这一层级指定执行者这样各个 stage 就可以根据需求独立地声明自己的 agent。 将环境变量统一管理 我们创建一个 environment 部分来集中定义环境变量简化了变量的管理并且当需要修改时只要在一个地方进行调整即可。 environment {REGISTRY swr.cn-north-4.myhuaweicloud.com/master-metaspaceKUBE_CONFIG --namespacemaster-metaspace --contextmasterKUBE_YAML_PATH /home/jenkins/workspace/yaml/master-metaspace// Assume that data is defined elsewhere or injected as a parameter.}使用共用方法减少代码重复 对于 Docker 镜像的构建和推送操作每个应用几乎执行相同的步骤。我们提取了一个方法 buildAndPushDockerImage 来代替在每个 stage 里重复定义的步骤这样不但减小了脚本体积也提升了代码的复用性。 def buildAndPushDockerImage(String imageName, String tag) {sh cd $imageName docker build --build-arg NODE_ENV$imageName -t $REGISTRY/$imageName:$tag .withCredentials([usernamePassword(credentialsId: hw-registry, passwordVariable: dockerPassword, usernameVariable: dockerUser)]) {sh docker login -u $dockerUser -p $dockerPassword $REGISTRYsh docker push $REGISTRY/$imageName:$tag} }同理部署到 Kubernetes 的指令也被提取到了 deployToKubernetes 方法中进一步去重。 def deployToKubernetes(String kubernetesComponent) {String templateFile ${KUBE_YAML_PATH}/${kubernetesComponent}.tplString outputFile ${KUBE_YAML_PATH}/${kubernetesComponent}.yamlsh sed -e s/{data}/$data/g $templateFile $outputFilesh sudo kubectl apply -f $outputFile $KUBE_CONFIG }结构的并行化 将 Docker 构建步骤组合为一个并行执行的 stage这样不仅可以缩短整个流水线的执行时间还可以使得结构更加清晰。 stage(Docker Builds) {parallel {stage(Build dataloader-game-ucenter) {agent { label build01 }when { environment name: dataloader, value: true }steps {buildAndPushDockerImage(dataloader-game-ucenter, env.data, env.BASE_WORKSPACE)}}stage(Build datawriter-game-ucenter) {agent { label build01 }when { environment name: datawriter, value: true }steps {buildAndPushDockerImage(datawriter-game-ucenter, env.data, env.BASE_WORKSPACE)}}stage(Build game-ucenter) {agent { label build01 }when { environment name: game-ucenter, value: true }steps {buildAndPushDockerImage(game-ucenter, env.data, env.BASE_WORKSPACE)}}}}转化后的好处 转换后的pipeline如下 pipeline {agent none // Use none at the top level, each stage will define its own agent.environment {REGISTRY swr.cn-north-4.myhuaweicloud.com/master-metaspaceKUBE_CONFIG --namespacemaster-metaspace --contextmasterKUBE_YAML_PATH /home/jenkins/workspace/yaml/master-metaspace// Assume that data is defined elsewhere or injected as a parameter.BASE_WORKSPACE xxxxxxx // 定义一个基础工作空间路径}stages {stage(GetCode) {agent { label build01 }steps {script {checkout scm: [$class: GitSCM,branches: [[name: env.branchName]],extensions: [[$class: CloneOption, depth: 1, noTags: false, shallow: true]],userRemoteConfigs: [[credentialsId: xxxx, url: env.gitHttpURL]]]}}}stage(Docker Builds) {parallel {stage(Build dataloader-game-ucenter) {agent { label build01 }when { environment name: dataloader, value: true }steps {buildAndPushDockerImage(dataloader-game-ucenter, env.data, env.BASE_WORKSPACE)}}stage(Build datawriter-game-ucenter) {agent { label build01 }when { environment name: datawriter, value: true }steps {buildAndPushDockerImage(datawriter-game-ucenter, env.data, env.BASE_WORKSPACE)}}stage(Build game-ucenter) {agent { label build01 }when { environment name: game-ucenter, value: true }steps {buildAndPushDockerImage(game-ucenter, env.data, env.BASE_WORKSPACE)}}}}stage(Development Deployment) {parallel {stage(Deploy datawriter-game-ucenter) {when { environment name: datawriter-game-ucenter, value: true }agent { label huaweiyun-xx }steps {deployToKubernetes(datawriter-game-ucenter)}}stage(Deploy dataloader-game-ucenter) {when { environment name: dataloader, value: true }agent { label huaweiyun-xx }steps {deployToKubernetes(dataloader-game-ucenter)}}stage(Deploy game-ucenter) {when { environment name: game-ucenter, value: true }agent { label huaweiyun-xx }steps {deployToKubernetes(game-ucenter)}}}}} }// Define methods outside pipeline to avoid repetitiondef buildAndPushDockerImage(String imageName, String tag, String workspacePath) {sh cd ${workspacePath} echo Current directory: \$(pwd) // 使用基础工作空间变量sh cd ${workspacePath}/${imageName} docker build --build-arg NODE_ENV$imageName -t $REGISTRY/$imageName:$tag .withCredentials([usernamePassword(credentialsId: hw-registry, passwordVariable: dockerPassword, usernameVariable: dockerUser)]) {sh docker login -u $dockerUser -p $dockerPassword $REGISTRYsh docker push $REGISTRY/$imageName:$tag} }def deployToKubernetes(String kubernetesComponent) {String templateFile ${KUBE_YAML_PATH}/${kubernetesComponent}.tplString outputFile ${KUBE_YAML_PATH}/${kubernetesComponent}.yamlsh sed -e s/{data}/$data/g $templateFile $outputFilesh sudo kubectl apply -f $outputFile $KUBE_CONFIG }代码结构清晰每个阶段的职责更加明确整个 Pipeline 结构变得简单易懂。维护成本降低通用操作被封装成方法避免了重复代码当流程需要修改时只需在一个地方更新。执行效率提升使用 parallel 来并行构建 Docker 镜像降低了整体构建时间。可扩展性增加如果将来要增加新的镜像构建或者 Kubernetes 部署只需很少的修改即可。 总结来说通过优化 Jenkins Pipeline 脚本我们不仅提高了流程的效率还大大减小了维护成本。在持续集成和持续部署的实践中拥有一个简洁和高效的 Pipeline 是至关重要的。 特意强调的 environment 添加了BASE_WORKSPACEwhy 在Jenkins中当你在一个Pipeline中使用并行步骤执行作业时默认情况下每个并行的分支都会创建一个新的工作空间目录格式一般为workspace2、workspace3等这样做是为了避免各个分支之间产生文件系统上的冲突。 这样带来的后果就是 构建过程中就会出现No such file or directory这样的报错 所以这里引入了BASE_WORKSPACE environment {REGISTRY swr.cn-north-4.myhuaweicloud.com/master-metaspaceKUBE_CONFIG --namespacemaster-metaspace --contextmasterKUBE_YAML_PATH /home/jenkins/workspace/yaml/master-metaspace// Assume that data is defined elsewhere or injected as a parameter.BASE_WORKSPACE /home/jenkins2/workspace/test6 // 定义一个基础工作空间路径}build过程中引入了: sh cd ${workspacePath} echo Current directory: \$(pwd)确保并行步骤中引用到正确的工作空间目录! 注 以上脚本代码转换后的pipeline使用chatgpt生成并多次修订
http://www.huolong8.cn/news/55425/

相关文章:

  • 网站开发毕业设计评审表常用网站开发语言
  • 建立网站邮箱长沙网站制作培训
  • 如何建微网站上海网站建设公司有多少家
  • 企业网站备案时间网站建设找谁做
  • 深圳做网站 龙华信科网站建设公司哪个好
  • 酒泉做网站深圳市住房和城乡建设厅网站
  • 有做义工的相亲网站吗肇庆做网站的公司
  • 想建设个网站怎么赚钱seo搜索是什么意思
  • 成立网站公司需要什么广州网站建设 骏域网站建设
  • 上海知名网站建设公司排名在百度上怎么发布信息
  • 枣阳网站定制永康关键词优化
  • 建设一个下载资料的网站app设计网站模板
  • 网站建设怎么找客源?如何策划网络事件营销
  • 昆明做网站建设网站建设论文总结
  • 做购物网站最开始没人怎么办linux怎么使用wordpress
  • 网站开发中效率较高的编程语言网站充值功能怎么做
  • 大连地区网站建设网站怎么做移动端的
  • 社科联网站建设织梦网站建设流程
  • 数据库支持的网站怎么做创意网站开发
  • 艺术学院网站建设网站案例介绍
  • 有哪些购物的网站网站做优化多少钱
  • 网站不能上传图片鹤壁网站设计
  • wordpress rrs织梦网站内部优化
  • dede移动端网站源码上海百度竞价托管
  • 郑州市金水区建设局官方网站有哪些app软件开发公司
  • 网站建设如何包含数据库房地产网站建设存在问题
  • 专注于网络推广及网站建设浙江中钦建设有限公司网站
  • 外贸购物网站建设网站翻页功能
  • 外包网站马克斯网站建设
  • 东莞寮步做网站的有吗网游推广