【问题标题】:Salesforce code deploymentSalesforce 代码部署
【发布时间】:2015-03-30 01:16:15
【问题描述】:

我们处于管理多个 Salesforce 帐户的独特情况,但具有非常相似的设置(自定义对象、字段、顶点代码)。

我正在努力寻找以有效方式在 Salesforce 组织之间维护代码的最佳方式。如果我们对 apex 类进行更新,我们宁愿不必进入每个组织并手动推送更新。你们推荐的最佳方法是什么?

托管包: 我们不希望软件包公开,而且我们不会盈利,因此在 AppExchange 上付费是没有意义的。否则,这似乎是利用自动推送更新的理想方案。

非托管包: 似乎符合要求,除了更新代码的工作流程。我们是否只需将更新后的非托管软件包安装到每个组织上(并且部署过程足够智能,可以更新而不是替换组件?)

Force.com 迁移工具: 似乎也是一个可行的选择。虽然我预想了同样的情况,在这种情况下推送更新会很困难。

有人对这种情况有什么建议吗?

【问题讨论】:

    标签: deployment salesforce apex-code


    【解决方案1】:

    跨多个环境管理代码库是一个常见问题。除了包和更改集之外,Salesforce 不提供太多指导。

    Force.com 迁移工具是一种技术性更强的方法,经常会因为看起来很复杂而被忽视。虽然需要一些 apache ant 知识,但您可以设置一个脚本,一步备份和部署到多个组织,您甚至可以使用 Jenkins 或类似工具自动执行此操作。例如,这是一个从源环境检索元数据并部署到目标的 ant 脚本:

    <project name="Demo"
         basedir="."
         xmlns:sf="antlib:com.salesforce">
    
    <property file="build.properties" />
    <property environment="env" />
    
    <tstamp />
    <property name="source" value="${DSTAMP} - source" />
    
    <target name="retrieveAndDeploy">
    
    <echo> Retriveing from Source </echo>
    <mkdir dir="${source}" />
    <sf:retrieve username="${sf-source.username}" 
                 password="${sf-source.password}" 
                 serverurl="${sf-source.serverurl}" 
                 retrieveTarget="${source}" 
                 unpackaged="package.xml"
                 pollWaitMillis="10000"
                 maxPoll="5000" />
    
    <echo> Validating Deployment from source to target </echo>
    <sf:deploy username="${sf-target.username}" 
             password="${sf-target.password}" 
             serverurl="${sf-target.serverurl}" 
             deployRoot="${source}"
             pollWaitMillis="10000"
             maxPoll="5000"
             checkOnly="true" />  
    
       </target>
    </project>
    

    这会从 package.xml 文件中提取清单,并且登录凭据将存储在单独的文件 (build.properties) 中。要运行它,您只需运行命令ant retrieveAndDeploy。虽然,这显然需要一些设置(安装 ant 和/或设置持续集成过程)。这是Force.com Migration Tool Guide中的所有大纲。

    有一些 UI 与 MavensMate for Sublime Text 或 Eclipse 的一部分做同样的事情,但它们并没有过度的灵活性,而且通常只适用于一次性部署

    这是我在部署时选择的方法,尤其是在积极开发时。您甚至可以将源代码控制添加到组合中并从 git 存储库进行部署,但这可能会变得难以管理。无论哪种方式,这都为自定义部署过程留下了很大的空间。

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      我会将此作为评论添加到 Blaine 的帖子中,但我没有足够的代表,所以这是你的答案。

      包是一个糟糕的主意,而且 100% 不是你想要的。

      您想使用 Ant(迁移工具)。一个普通的 Ant 部署有 3 个部分

      1. 要部署的组件列表(即“opportunityUpdates.xml”)。
      2. 一个 build.properties 文件。您可以在此处定义下一个文件中使用的属性。这将包括 Salesforce Urls、您要部署的包名称(每次部署时更新)和密码等属性。
      3. build.xml 文件。这是你告诉和做什么的地方。对于您的具体情况,您的步骤可能是从 QA 检索、部署到 org1、部署到 org2

      完成初始设置后,单个部署所需的时间比汇总更改集要少。

      【讨论】:

        【解决方案3】:

        使用带有 Force.com 插件的 Eclipse IDE。创建 force.com 项目并将其与您想要部署到所有其他组织的代码的组织同步。之后为这个项目更新 force.com 的性质,并通过 IDE 将代码部署到另一个组织。这可能会有所帮助

        【讨论】:

          【解决方案4】:

          托管软件包不需要公开或在应用程序交换中。您可以在其上设置密码以限制安装。

          您还可以将所需的方法和类公开为全局。

          如果您不打算对其进行安全审查,这条路径会有一些很大的缺点:

          1. 一旦将某些组件部署为受管软件包的一部分,就很难删除或更改它们。
          2. 您无法访问受管软件包中的类的调试日志记录。

          如果这是您要经常做的事情并且需要可重复,那么元数据 API 或 Force.com 迁移工具将是不错的选择。

          【讨论】:

            猜你喜欢
            • 2018-06-12
            • 2016-07-10
            • 1970-01-01
            • 2016-04-08
            • 1970-01-01
            • 1970-01-01
            • 2023-04-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多