【发布时间】:2022-01-06 09:03:29
【问题描述】:
这里是camunda的新手。我正在考虑在与我的后端应用程序相同的存储库中维护 war 文件(即 bpmn 文件、表单和代码),并通过合并到 master 自动部署它们,以便将新版本的工作流合并到主人,它也被压缩在一个战争文件中并被部署。我想知道 war 文件是否可以仅包含没有 java 代码的 bpmn 及其表单,以防特定工作流真的不需要完成 java 代码?
【问题讨论】:
这里是camunda的新手。我正在考虑在与我的后端应用程序相同的存储库中维护 war 文件(即 bpmn 文件、表单和代码),并通过合并到 master 自动部署它们,以便将新版本的工作流合并到主人,它也被压缩在一个战争文件中并被部署。我想知道 war 文件是否可以仅包含没有 java 代码的 bpmn 及其表单,以防特定工作流真的不需要完成 java 代码?
【问题讨论】:
由于您没有向我们提供有关您的 Camunda Stack 的足够信息,因此此答案可能过于笼统。
根据official Camunda documentation,您基本上有两个部署选项:
您当然可以拥有一个仅包含表单和.bpmn(或.dmn)文件的.war 部署文件。您可以通过单独的流程应用程序检查.war 的following simple example 部署到共享容器管理的流程引擎。
如果您可以访问您的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";
我希望您能从中找到任何有用的东西。您可以在每种方法中找到许多来源。
【讨论】: