<div id="q5pi1"></div>

<em id="q5pi1"></em>
<div id="q5pi1"></div>
  • <em id="q5pi1"><tr id="q5pi1"></tr></em>
  • <em id="q5pi1"></em>

    如何使用Docker数据卷进行大规模构建

    Docker容器已成为测试开发和持续集成工作流程中不可或缺的一部分使用容器的好处之一是它们的尺寸相对较小且生命周期短团队可以生成清晰可重现的构建可以快速部署此外没有剩余的环境数据或自定义工具来破坏构建

    有一个问题也是Docker的一个好处就是每次运行后所有内容都会被摒弃

    如果您正在管理许多大型资产例如许多Helix Core客户您需要一种方法来部署容器而不会减慢速度复制大量可能非常大的文件如图形电影和声音数千次会严重影响性能

    持久的外部存储如Docker卷可以显着减少将大量代码和非代码资产引入容器所需的时间这可以加速您的容器工作流程并提高团队生产力

    在本博客中我们将回顾使用Helix Core的不同方法以允许容器访问未更改的代码和其他大型二进制资产

    没有Docker容器的构建

    在Docker之前像Jenkins这样的构建代理将使用Helix Core工作区同步来自Helix Core的源代码Helix Core跟踪同步到构建代理程序工作区的文件修订

    使用最新文件版本更新构建代理程序的工作空间时Helix Core工作空间仅发送已更改的文件Helix Core使用数据表db.have来跟踪同步到工作空间的修订您可以使用p4 have命令查看此信息

    在没有容器的情况下构建和同步是快速有效的但是这种方法缺乏容器提供的所有优点例如清洁和管理的环境

     那么如何才能有效地将文件同步到临时构建环?#25345;心أ?/span>

    使用虚拟机的问题

    公司转而使用虚拟机或虚拟机来寻求解决方案虚拟机提供了一种方法来拍摄机器状态的快照 - 一种版本控制但是这仍然缺乏控制机器环境所需的更正式的管理其他缺点包括

    虚拟机具有很多复?#26377;ԣ?#23588;其是与容器相比时

    需要安装和配置VM

    虚拟机消耗更多的IT?#35797;?#24182;且可能比容器更昂贵

    在VM上配置整个环境时构建可能会中断只是为了检查最新的代码更改这会导致您的开发和后续管道出现重大延迟这就是为什么我们看到团队越来越多地采用容器来开发测试和部署其持续集成/持续交付CI / CD管道

    PuppetChefVagrant都提供了管理环境的方法但Docker是一种有效控制整个机器环境的方法

    使用Docker进行持续集成

    Docker容器为开发人员和DevOps团队提供了更大的灵活性它们是VM的轻量?#30701;?#20195;品它们可以在几秒钟内创建并在达到目的时被杀死

    事实证明Docker可为团队的持续集成工作流程提供性能改进

    构建Web应用程序

    采用微服务架构

    处理不使用大量代码构建或部署的项目

    使用容器每次都可以获得干净的同步并且早期版本中没有剩余的环?#25104;?#32622;不需要安装不同的工具链

    那么你需要Docker的Helix核心工作区吗

    如果容器生命周期短那么Helix Core有几种选择每次容器启动时您应该使用新的Helix Core工作区吗如果每次运行同步源您是否还需要Helix Core工作区

    使用Helix Core工作区具有优势它允许您

    控制视图

    ?#25104;次?#20214;

    修订版

    应用过滤器

    更重要的问题在与db.have列表同步时是否应该跟踪文件修订让我们来看看你的选择

    配置新的Helix核心工作区

    为每个容器设置新工作区都有好处运行构建时您知道工作区中没有任何剩余内容并且可以快速启动

    但是每次创建容器时都需要?#22659;?#26087;工作区如果不?#22659;?#23427;则可能会阻塞Helix Core db.have列表更好的是由于工作区仅使用一次因此请使用p4 sync -p命令跳过记录有列表您可以使用Jenkins插件选项'SyncOnly'并取消选中'Populate Have List'选项以避免同步“have list”

    checkout perforce(  credential: 'myID',   populate: syncOnly(have: false),   workspace: manualSpec(cleanup: true,     view: '//depot/project/… //${P4_CLIENT}/')  ))

    如果你观察的比较仔细你可能已经在Jenkins p4插件中发现了一个新的“清理”选项这不会在Pipeline语法代码段生成器中公开将此选项设置为true将在初始同步后?#22659;?span style="font-family: Calibri;">Helix Core工作区

    不过要小心确保没有后续管道步骤需要Helix Core工作区非常重要或者有一个'p4cleanup'管道步骤'cleanup'的别名如果设置为true将?#22659;?span style="font-family: Calibri;">Helix Core工作区和所有本地文件

    cleanup(true)

    重用Helix核心工作区

    如果您选择重复使用Helix Core工作区则可以跳过清理和?#22659;?#27493;骤您需要忽略“have list”因为先前的同步将不再具有相关信息您可以使用“Force Sync”填充选项来实现此目的但同样由于未使用“have list”信息最好取消选中“Populate Have List”选项

    注意您无法设置'Force Syne'并取消设置'Populate Have List'因为这是无效状态您不能忽略您从未创建的列表

    使用Docker卷构建1 TB项目

    许多Helix Core用户不仅处理小型源代码库它们还具有包含数十万或数百万个文件的大型代码库其中一些代码库包括大型资产文件如二进制文件可能达到超过1 TB的项目代码因此仅使用容器丢弃工作空间仅重新同步所有文件不是一种选择

    那么Docker如何扩展以支持大型文件和代码库呢

    答案是这样的Docker使用的一些持久数据不会一直改变实现Docker卷允许您在容器外部编译一些资产然后将它们拉入构建中

    我们没有扩展容器相反我们在Jenkins构建机器之外放置了一些代码以及非代码二进制资产图形等这节省了编译和复制大文件的时间这些大型资产可以在外部存储上随时使用并且可以随时使用   

    如何在Helix Core中创建Docker卷

    请按照以下步骤创建持久的外部存储

    1.将构建区域安装在容器外部以便它可以通过构建持久化

    2.如果?#20204;?#22495;是共享的或存在被污染风险请使用“AutoCleanPerforce协调/清洁

    3.或者如果可以保证Docker卷始终?#19978;?#21516;的Jenkins作业代理和Helix Core工作区使用请使用“SyncOnly

    处理并发访问

    防止并发访问Docker?#20197;?#30340;共享工作空间至关重要从同一组外部文件构建多个Docker实例是一个坏主意 - 除非您确定生成的资产或中间文件对另一个容器不可见

    虽然Helix Core工作区重用具有其优势但同一工作空间的并发访问将导致问题如果两个或更多执行者试图更新相同的“have list”则尤其如此

    将功能与Helix Core持续集成

    Docker是一个非常强大的工具可以加速持续集成并为开发人员提供即时反馈它可以更好地保证您在生产中运行的内容通过使用外部存储如Docker卷来保存一些代码和二进制文件即使对于大型项目您也可以实现这些优势

    原文链接https://www.perforce.com/blog/vcs/how-use-docker-volumes-massive-builds

    35ѡ7

    <div id="q5pi1"></div>

    <em id="q5pi1"></em>
    <div id="q5pi1"></div>
  • <em id="q5pi1"><tr id="q5pi1"></tr></em>
  • <em id="q5pi1"></em>

    <div id="q5pi1"></div>

    <em id="q5pi1"></em>
    <div id="q5pi1"></div>
  • <em id="q5pi1"><tr id="q5pi1"></tr></em>
  • <em id="q5pi1"></em>