<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)管道。

    Puppet,ChefVagrant都提供了管理环境的方法,但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;是共享的或存在被污染风险,请使用“AutoClean”(Perforce协调/清洁)。

    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>
    如何看pk10彩票走势图 浙江快乐彩助手下载 多乐彩11选5大赢家 2O18二肖中特顶尖号码 大神北京28官网预测 6场半全场奖金一般多少 浙江快乐彩12选5中奖 天津快乐10分钟一定牛 河内五分彩开奖 黑龙江11选5彩票群 4场进球预测 大小特码 浙江快乐12推测 高手版二肖中特 广西彩票中心