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

网站开发图山西建站

网站开发图,山西建站,wordpress转成繁体,作图软件免费在云原生领域#xff0c;无论使用哪种编排调度平台#xff0c;Kubernetes#xff0c;DockerSwarm#xff0c;OpenShift等#xff0c;业务都需要基于镜像进行交付#xff0c;我们在内部实践“Source-to-image”和链式构建#xff0c;总而总结出“OneBuild”模式。 其核心…在云原生领域无论使用哪种编排调度平台KubernetesDockerSwarmOpenShift等业务都需要基于镜像进行交付我们在内部实践“Source-to-image”和链式构建总而总结出“OneBuild”模式。 其核心思想是一处构建多处使用。 问题 一般我们会使用类似Jenkins CI系统来构建镜像以满足持续集成持续开发持续交付等场景。事实上如果我们在某一方面能够提升效率或者解决镜像交付实践。 长期来看将能够带来不少的成本收益并且对于平台来讲这种收益是一种可度量收益。假设我们在当前交付git分支中需要fix或者feature已经release分支的如何进行如果在已经交付给用户的镜像中存在漏洞需要批量交付如何进行为了解决这些问题我们的团队必须重新构建镜像并且找出基本镜像构建过程有那些依赖关系。然后基于这些成熟的流程和规范进行快速交付。 解决方案 Docker build是大家比较常用的镜像构建方法并且在构建中只需要声明自己的Dockerfile即可就可以实现快速构建。但是这并不满足大型企业实践以及快速交付。 所以需要一套规范且能够直接生产的流程帮助在云原生下进行快速交付。下面我们讲结合行云平台进行“OneBuild”方法的实践。 悬衡而知乎没规而知圆。因此我们在团队的流水线建立和改造的过程中尤其注重标准化。 包括dockerfile的命名和设计构建代码的设计。由此新项目加入时我们只需复制然后做小工作量的改造即可。 行云Build 行云是JDT生产效率的标准化产品是一个比较成熟的产品。用于支撑内部研发测试交付的平台。 Build是行云中一个子系统用于研发过程中的持续集成持续测试持续构建等任务。 团队日常开发语言主要是以golang为主并且在上线或交付制品中也以Docker镜像为主。并且由于大多数时间我们必须在真实的K8S环境中运行。 所以稳定的构建平台高效快速的构建对我们的日常开发和交付都是至关重要在构建中往往需要构建多版本镜像。所以围绕行云流水线主要就是发掘功能适配改造。 Dockerfile标准化 接下来我们设计的流程将会使用上一级构建的产品对下级镜像进行快速装箱。 Dockerfile命名 Dockerfile # 标准版Dockerfile.kylinv10 # kylinv10 base 版本Dockerfile.oel22 # openeuler base 版本 下面我们继续看dockerfile中的细节。 首先是 Dockerfile ARG ARCHARG BUILD_IMAGEARG BASE_IMAGEFROM ${BUILD_IMAGE} as builderARG ARCHENV GOPATH/goCOPY go.mod go.modCOPY go.sum go.sumCOPY main.go main.goCOPY api/ api/COPY controllers/ controllers/COPY pkg/ pkg/COPY vendor/ vendor/# BuildRUN CGO_ENABLED0 GO111MODULEon GOOSlinux GOARCH${ARCH} go build --modvendor -a -o manager main.goARG ARCHARG BASE_IMAGEFROM ${BASE_IMAGE}ENV PIP3_SOURCEhttps://pypi.tuna.tsinghua.edu.cn/simpleENV DEFAULT_FORKS50ENV DEFAULT_TIMEOUT600ENV DEFAULT_GATHER_TIMEOUT600ENV TZAsia/ShanghaiENV PYTHONWARNINGSignore::UserWarningWORKDIR /COPY --frombuilder /manager .COPY inventory/ inventory/COPY roles/ roles/COPY etcd-restore.yml etcd-restore.ymlCOPY facts.yml facts.ymlCOPY requirements.txt requirements.txtCOPY inventory.tmpl.ini inventory.tmpl.iniCOPY ansible.cfg ansible.cfgRUN yum -y install kde-l10n-Chinese \yum -y reinstall glibc-common \localedef -c -f UTF-8 -i zh_CN zh_CN.UFT-8 \echo LANGzh_CN.UTF-8 /etc/locale.conf \source /etc/locale.conf \yum clean allENV LANGzh_CN.UTF-8ENV LC_ALLzh_CN.UTF-8RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \echo $TZ /etc/timezone \yum install python3 python3-devel sshpass openssh-clients -y \yum clean all \/usr/bin/python3 -m pip --no-cache-dir install pip21.3.1 -U -i $PIP3_SOURCE \/usr/bin/python3 -m pip --no-cache-dir install -r requirements.txt -i $PIP3_SOURCEUSER rootENTRYPOINT [/manager] 上述dockerfile中分为两个阶段构建第一个阶段builder构建出需要的二进制。这与正常的dockerfile相同。 唯一不同的是我们讲构建镜像和base镜像进行了参数化这也使得当变更构建镜像和base镜像我们只需要在构建时控制参数即可。 再看dockerfile.kylinv10 ARG BASE_IMAGEFROM ${BASE_IMAGE}ENV PIP3_SOURCEhttps://pypi.tuna.tsinghua.edu.cn/simpleENV DEFAULT_FORKS50ENV LANGen_US.UTF-8ENV DEFAULT_TIMEOUT600ENV DEFAULT_GATHER_TIMEOUT600ENV TZAsia/ShanghaiENV PYTHONWARNINGSignore::UserWarningWORKDIR /COPY --fromjdos-etcd-restore-helper:latest /manager /COPY inventory/ inventory/COPY roles/ roles/COPY etcd-restore.yml etcd-restore.ymlCOPY facts.yml facts.ymlCOPY requirements.txt requirements.txtCOPY inventory.tmpl.ini inventory.tmpl.iniCOPY ansible.cfg ansible.cfgRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \echo $TZ /etc/timezone \yum install python3 python3-devel python3-pip sshpass openssh-clients -y \/usr/bin/python3 -m pip --no-cache-dir install pip21.3.1 -U -i $PIP3_SOURCE \/usr/bin/python3 -m pip --no-cache-dir install -r requirements.txt -i $PIP3_SOURCEUSER rootENTRYPOINT [/manager] 发现了什么在dockerfile.kylinv10中少了builder这一步COPY --fromjdos-etcd-restore-helper:latest 是从一个指定的临时镜像中直接做了拷贝。这就直接复用了第一步dockerfile中构建出的产物。效率提升比较明显。 在dockerfile设计中COPY是可以从一个指定的镜像中copy指定的文件的。 再看Dockerfile.oel22 ARG BASE_IMAGEFROM ${BASE_IMAGE}ENV PIP3_SOURCEhttps://pypi.tuna.tsinghua.edu.cn/simpleENV DEFAULT_FORKS50ENV LANGen_US.UTF-8ENV DEFAULT_TIMEOUT600ENV DEFAULT_GATHER_TIMEOUT600ENV TZAsia/ShanghaiENV PYTHONWARNINGSignore::UserWarningWORKDIR /COPY --fromjdos-etcd-restore-helper:latest /manager /COPY inventory/ inventory/COPY roles/ roles/COPY etcd-restore.yml etcd-restore.ymlCOPY facts.yml facts.ymlCOPY requirements.txt requirements.txtCOPY inventory.tmpl.ini inventory.tmpl.iniCOPY ansible.cfg ansible.cfgRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \echo $TZ /etc/timezone \yum install python3 python3-devel python3-pip sshpass openssh-clients -y \/usr/bin/python3 -m pip --no-cache-dir install pip21.3.1 -U -i $PIP3_SOURCE \/usr/bin/python3 -m pip --no-cache-dir install -r requirements.txt -i $PIP3_SOURCEUSER rootENTRYPOINT [/manager] 是不是与dockerfile.kylinv10的思路非常相似事实上这两个文件已经可以合并了内部为了向后兼容没有合并这两个文件。 脚本标准化 还需要在行云流水线中将shell脚本进行固化与dockerfile进行配合。 # 支持shell语言代码的多行输入cd /sudo docker login -u $IMAGE_REPO_USER -p $IMAGE_REPO_PASSWD $(echo $IMAGE_REPO | awk -F / {print $1})git_commit${output.Download_Code.GIT_LAST_COMMIT_SHA1}build_date$(date -u %Y-%m-%dT%H:%M:%SZ)image_tag${env.GenerateNewVersion}-${git_commit:0:6}echo start build image - standardnew_image_repo${IMAGE_REPO}sudo docker build -t ${new_image_repo}:${image_tag} -f Dockerfile --build-arg ARCHamd64 . sudo docker login -u $IMAGE_REPO_USER -p $IMAGE_REPO_PASSWD $(echo $IMAGE_REPO | awk -F / {print $1})sudo docker push ${new_image_repo}:${image_tag}echo end to build image - standardecho amd64ImageName${new_image_repo}:${image_tag} ./amd64_output# 重新命名一个新镜像供下级dockerfile进行多阶段构建时直接copysudo docker tag ${new_image_repo}:${image_tag} jdos-etcd-restore-helper:latest# 条件性选择构建基于kylinv10OS的镜像if [[ -f Dockerfile.kylinv10 ]];thenecho start build image - security - kylin basenew_image_repo${IMAGE_REPO}-kylinv10-amd64sudo docker build -t ${new_image_repo}:${image_tag} -f Dockerfile.kylinv10 --build-arg ARCHamd64 . sudo docker login -u $IMAGE_REPO_USER -p $IMAGE_REPO_PASSWD $(echo $IMAGE_REPO | awk -F / {print $1})sudo docker push ${new_image_repo}:${image_tag}echo end to build image - security - kylin baseecho amd64KylinImageName${new_image_repo}:${image_tag} ./amd64_outputfi# 条件性选择构建基于欧拉OS的镜像if [[ -f Dockerfile.oel22 ]];thenecho start build image - security - openeuler22 basenew_image_repo${IMAGE_REPO}-openeuler22-amd64sudo docker build -t ${new_image_repo}:${image_tag} -f Dockerfile.oel22 --build-arg ARCHamd64 . sudo docker login -u $IMAGE_REPO_USER -p $IMAGE_REPO_PASSWD $(echo $IMAGE_REPO | awk -F / {print $1})sudo docker push ${new_image_repo}:${image_tag}echo end to build image - security - openeuler22 baseecho amd64Oel22ImageName${new_image_repo}:${image_tag} ./amd64_outputfi# 清理builder镜像避免产生none垃圾镜像。sudo docker rmi jdos-etcd-restore-helper:latest --force 提升 基于以上构建时间从21min缩短至7min构建效率提升66%。我们总结出“OneBuild”方法即构建一次多处使用的思路。 标准化的shell与dockerfile进行配合能够做到一次构建多处使用。提升了构建效率。 讨论 上述完整介绍了多个镜像构建的流程和设计规范也说明“OneBuild”可以进行快速构建的优点。所以OneBuild的对于中大型组织或者有快速交付需求的团队来讲是非常有帮助的。 并且对效率的提升是可以看得见的。 作者京东科技 王晓飞 来源京东云开发者社区 转载请注明来源
http://www.w-s-a.com/news/436001/

相关文章:

  • 中山网站建设界面设计职业技能等级证书
  • 做网站首页多少钱免费版企业邮箱注册
  • ppp模式在网站建设的南昌专业做网站公司哪家好
  • 泰安网站建设制作电话号码百度sem竞价托管公司
  • 苏网站建设网页设计和网页美工
  • 跨境电商平台网站广州地铁站路线图
  • 吉林省交通建设集团有限公司网站企业网站推广的策略有哪些
  • 网站内链怎么做更好郑州网站建设哪家便宜
  • 建设大型购物网站运城哪里做网站
  • php企业网站通讯录管理系统做网站在线支付系统多少钱?
  • 怎么区分用vs和dw做的网站贝贝网网站开发背景
  • 无锡网站建设制作建设信息网查询
  • 彩票系统网站开发建设人力资源网官网
  • 有专门下载地图做方案的网站吗网站建设平台计划书
  • 网站闭站保护10个著名摄影网站
  • 安徽省建设工程信息网官网首页网站关键词排名优化工具
  • 深圳网站建设 百业网站专题教程
  • 公司seo是指什么意思如何来做网站优化
  • 化妆品网站建设平台的分析湖南网站搜索排名优化电话
  • 织梦网站修改教程视频教程管理类网站开发价格
  • 如何让新网站快速收录企业建站的作用是什么
  • 在线制作简历的网站做的最好的微电影网站
  • h5制作的网站网络游戏投诉平台
  • 做外贸网站好还是内贸网站好珠海新盈科技有限公 网站建设
  • php和网站开发网络软营销
  • 大型做网站的公司有哪些wordpress注册链接无效
  • 推荐门户网站建设公司网站开发移动端
  • 公司网站的栏目设置成都十大监理公司排名
  • 安溪住房和城乡建设网站关岭县建设局网站
  • 网站域名注销备案徐州房产网