【问题标题】:Camunda war file deployment with bpmn only仅使用 bpmn 部署 Camunda 战争文件
【发布时间】:2022-01-06 09:03:29
【问题描述】:

这里是camunda的新手。我正在考虑在与我的后端应用程序相同的存储库中维护 war 文件(即 bpmn 文件、表单和代码),并通过合并到 master 自动部署它们,以便将新版本的工作流合并到主人,它也被压缩在一个战争文件中并被部署。我想知道 war 文件是否可以仅包含没有 java 代码的 bpmn 及其表单,以防特定工作流真的不需要完成 java 代码?

【问题讨论】:

    标签: java tomcat war camunda


    【解决方案1】:

    由于您没有向我们提供有关您的 Camunda Stack 的足够信息,因此此答案可能过于笼统。

    根据official Camunda documentation,您基本上有两个部署选项:

    • 部署到 Camunda(稍后在此答案中讨论)
      • 通过流程应用程序部署(包含您的流程的应用程序,可以作为 .jar/.war 部署到包含流程引擎的应用程序服务。
      • 使用 REST API
    • 使用 Camunda 部署 - (所有工件都在一个位置,通常是 Spring Boot 应用程序,并且在应用程序启动时找到并部署进程,因为这是一种简单的方法,我不会进一步讨论这个选项)

    处理申请

    您当然可以拥有一个仅包含表单和.bpmn(或.dmn)文件的.war 部署文件。您可以通过单独的流程应用程序检查.warfollowing simple example 部署到共享容器管理的流程引擎。

    REST API

    如果您可以访问您的Camunda REST API,您还可以考虑通过/engine-rest/deployment/create 端点进行部署(可以在here 找到端点的文档和规范)。

    如果您计划自动化流程部署过程,我还提供了我们在 Gitlab CI/CD 管道中使用的脚本来部署流程。我们将流程(.bpmn.dmn.js 和表单)保存在单独的存储库中,结构如下:

    • 进程存储库
      • definitions/ - .bpmn.dmn 文件
      • scripts/ - 脚本任务或侦听器所需的 javascript 文件
      • forms/ - 我们用于自定义构建用户任务表单的 JSON 表单

    我们的案例可能与您的不同,但脚本可以根据您的特定需求进行调整或作为灵感:

    #!/bin/bash
    
    SCRIPT=`realpath $0`
    SCRIPTPATH=`dirname $SCRIPT`
    
    if [ -z "$CAMUNDA_DEPLOYMENT_ENDPOINT" ]; then # LOCAL DEPLOYMENT ENDPOINT WON'T BE SET
      CAMUNDA_DEPLOYMENT_ENDPOINT="http://localhost:8080/engine-rest/deployment/create"
    fi
    
    if [ -z "$CAMUNDA_DEPLOYMENT_NAME" ]; then # OPTIONAL: YOU CAN NAME THE DEPLOYMENT VIA ENV VARIABLE
      CAMUNDA_DEPLOYMENT_NAME="rest-deployment"
    fi
    
    # FAIL THE SCRIPT WHEN CREDENTAILS ARE NOT SET
    if [ -z "$CREDENTIALS_USERNAME" ]; then
      echo "Error: Username not set, please set the CREDENTIALS_USERNAME env variable."
      exit 1;
    fi
    if [ -z "$CREDENTIALS_PASSWORD" ]; then
      echo "Error: Password not set, please set the CREDENTIALS_PASSWORD env variable."
      exit 1;
    fi
    
    ENCODED_CREDENTIALS=$(echo -n "$CREDENTIALS_USERNAME:$CREDENTIALS_PASSWORD" | base64)
    
    echo "Deploying to $CAMUNDA_DEPLOYMENT_ENDPOINT"
    
    CURL_OPTS="curl --write-out '%{http_code}' --show-error --fail --silent --request POST --url $CAMUNDA_DEPLOYMENT_ENDPOINT --header 'Authorization: Basic $ENCODED_CREDENTIALS' --header 'Content-Type: multipart/form-data' --header 'content-type: multipart/form-data;' --form deployment-name=$CAMUNDA_DEPLOYMENT_NAME "
    
    if [ -z "$(ls -A scripts/)" ]; then
       echo "Empty scripts folder"
    else
       while read -r file; do
        echo "Adding following javascript source: $file"
        name=${file##*/}
        CURL_OPTS+="--form $name=@$SCRIPTPATH/$file "
        done<<< "$(find scripts/ -type f -print)"
    fi
    
    if [ -z "$(ls -A definitions/)" ]; then
       echo "Empty definitions folder"
    else
    while read -r file; do
        echo "Adding following process definition source: $file"
        name=${file##*/}
        CURL_OPTS+="--form $name=@$SCRIPTPATH/$file "
    done<<< "$(find definitions/ -type f -print)"
    fi
    
    if [ -z "$(ls -A forms/)" ]; then
       echo "Empty forms folder"
    else
    while read -r file; do
        echo "Adding following form file: $file"
        name=${file##*/}
        CURL_OPTS+="--form $name=@$SCRIPTPATH/$file "
    done<<< "$(find forms/ -type f -print)"
    fi
    
    echo "Executing deployment request:"
    echo "------------------------------"
    
    echo "RESPONSE:"
    echo "------------------------------"
    echo "$CURL_OPTS"
    response=$(eval "$CURL_OPTS")
    echo "------------------------------"
    echo "$response";
    

    我希望您能从中找到任何有用的东西。您可以在每种方法中找到许多来源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多