【问题标题】:How to tell an AEM publish node and author node apart via REST API如何通过 REST API 区分 AEM 发布节点和作者节点
【发布时间】:2016-12-31 19:44:40
【问题描述】:

我一直在使用包管理器命令将 AEM 包部署到创作节点,作为持续部署管道的一部分。我现在将其扩展为直接部署到发布节点。我需要(根据节点所有者)稍微不同地执行此操作。

由于我正在对这些交互进行编程并且必须支持一大堆节点,我想知道管道是否可以调用某个端点,该端点对于作者或发布者来说是独一无二的,以便我可以检测这次选择了哪个端点?

这里是我正在拨打的电话的一个示例。

curl -u admin:admin -X POST http://localhost:4502/crx/packmgr/service/.json/etc/packages/my_packages/samplepackage.zip?cmd=uninstall

很遗憾,除了包管理器 API,我对 AEM 还不是很熟悉。我从AEM CQ5 Tutorials 获得了这个示例,但没有发现其他任何直接有用的东西,可能是因为我不确定 REST API 与哪种节点相关。

如果我能找到一种廉价且无害的 GET 且独一无二,我将被排序。

【问题讨论】:

  • 您可以获得http://author.local.telegraph.co.uk:4502/system/console/status-slingsettings.json 来检查运行模式,但您需要提供系统控制台的凭据。为什么你仍然需要这样做?部署 AEM 实例时,您将其设置为作者或发布者,以后无法更改。为了针对多个 AEM 实例执行脚本,无论如何您都需要这些实例的列表。该列表可能包含必要的元数据(实例是 AEM Author 还是 Publish)
  • 原因是经济上的。我不是在编写脚本,管道实际上是一个复杂的系统,它支持 N 种部署技术,AEM 只是其中之一。理想情况下,系统可以存储一些额外的数据,如节点类型,但询问端点可能更便宜。我们很有可能会添加一个功能来存储节点类型,或者我们可能会采用这种方式,具体取决于我们得到的答案。

标签: aem continuous-deployment devops


【解决方案1】:

我已经使用这个SlingSettings API 来获取吊索运行模式,您可以使用它来确定它是author 还是publish。这是一个非常轻量级的调用。

http(s):<host:port>/system/console/status-slingsettings.json

【讨论】:

    【解决方案2】:

    AEM 提供与运行模式无关的程序包部署方式,除非您对这些实例有不同的部署。

    在大多数一般用例中,作者和发布的部署包是相同的,部署路径也是相同的,所有变化都是主机。我们为部署目的构建了一个单独的 pom 项目,它可以直接将任何类型的包推送到指定为 CI Job 参数的任何节点。在我们的例子中,我们只使用它来部署一个完整的应用程序包。

    POM 看起来像这样 -

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <artifactId>cms-parent</artifactId>
            <groupId>com.myproject.cms</groupId>
            <version>1.0.2</version>
        </parent>
    
        <artifactId>cms-deploy</artifactId>
        <groupId>com.myproject.cms.deploy</groupId>
        <packaging>pom</packaging>
        <version>1.0.0</version>
        <name>
            AEM :: Deploy
        </name>
    
        <properties>
            <app.cms.myproject.complete.version>1.0.0-SNAPSHOT</app.cms.myproject.complete.version>
        </properties>
    
        <build>
            <plugins>
                <!-- additionally deploy three further content-packages which are not part of the complete-package -->
                <plugin>
                    <groupId>com.day.jcr.vault</groupId>
                    <artifactId>content-package-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <!-- override the default execution defined in the cq-parent by binding it to some invalid phase -->
                            <id>default-package</id>
                            <goals>
                                <goal>package</goal>
                            </goals>
                            <phase>foobar</phase>
                        </execution>
                        <execution>
                            <!-- override the default execution for install-package, which is called whenever you call deploy -->
                            <id>install-package</id>
                            <goals>
                                <goal>install</goal>
                            </goals>
                            <phase>foobar</phase>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
        <profiles>
    
            <profile>
                <id>install-myproject-complete</id>
                <build>
                    <plugins>
                        <plugin>
                            <artifactId>content-package-maven-plugin</artifactId>
                            <groupId>com.day.jcr.vault</groupId>
                            <executions>
                                <!-- deploy the scripts and classes (part of the release) -->
                                <execution>
                                    <id>install-myproject-complete</id>
                                    <goals>
                                        <goal>install</goal>
                                    </goals>
                                    <configuration>
                                        <artifactId>myproject-complete</artifactId>
                                        <groupId>com.myproject.cms.msites</groupId>
                                        <version>${app.cms.myproject.complete.version}</version>
                                    </configuration>
                                </execution>
                            </executions>
                        </plugin>
                    </plugins>
                </build>
            </profile>
        </profiles>
    </project>
    

    您可以在 CI 中创建一个 maven 项目(我将 Jenkins 称为 CI,您可以适应您的服务器)并将其设置为接受 hostdeployment version 的参数化构建

    接下来是配置 Source Code Management 以指向 SCM 中的上述 pom 项目并配置 maven 构建步骤 -

    在目标和选项中指定 - 对于作者部署 -

    -U clean install -Pinstall-myproject-complete -Dcrx.host=${host}-author.mysite.com -Dcrx.port=4502 -e -Dapp.cms.myproject.complete.version=${version}
    

    用于发布部署 -

    -U clean install -Pinstall-myproject-complete -Dcrx.host=${host}-publish.mysite.com -Dcrx.port=4503 -e -Dapp.cms.myproject.complete.version=${version}
    

    这是基本配置,您可以进一步自定义它以接受整个节点名称/ip 以及端口信息,以保持单个管道用于部署

    【讨论】:

    • 感谢您的详细回复,但部署过程的细节在我的客户机构对于每个节点类型都不同。对不起。
    猜你喜欢
    • 2021-09-13
    • 2021-03-13
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    相关资源
    最近更新 更多