Skip to main content
Version: 2026.3

Automate deployment

Introduction to deployment automation​

Since all deployment jobs are performed by Indicium, it is possible to automate the entire process using the Thinkwise Platform API. You can find the run jobs in the Software Factory menu Maintenance > Jobs. You can also use third-party CI/CD tools to automate the build pipeline, see Build integrations.

warning

For deployment automation, use the Indicium instance running on the IAM facilitating the Software Factory.

Definitions of CI/CD​

CI/CD means Continuous Integration/Continuous Delivery or Continuous Deployment. It is a set of practices that automate the integration of code changes from multiple developers into a single software project. Benefits of CI/CD are faster release cycles, improved code quality, reduced manual errors, and faster feedback and issue detection.

  • Continuous Integration (CI) is the practice of frequently integrating code changes into a shared repository. Developers commit code regularly (multiple times a day), automated builds and tests are triggered on each commit, and immediate feedback is provided on the integration status. The main goals are to detect errors quickly, improve software quality, and reduce integration problems.

  • Continuous Delivery (CD) is the practice of ensuring that code changes are automatically prepared for a release to production. Builds are automatically tested and staged, code is always in a deployable state, and deployment to production requires a manual approval.

  • Continuous Deployment (CD) goes one step further than Continuous Delivery. Every code change that passes all stages of the pipeline is automatically deployed to production without human intervention.

Get the current job status​

To obtain the current job status (field job_status) of a given job:

GET [indicium]/iam/sf/job([job_id])

Possible values of the job_status:

ValueDescription
0Queued
1Pending (to be picked up by Indicium)
2Active
3Completed
4Failed
5Canceled
6Aborted

Cancel all jobs​

To be sure that no other jobs are running, you can cancel all jobs for the model and branch before starting the planned job.

Use the following parameters:

ParameterDescriptionPossible values
model_idThe ID of the model you want to create the deployment package for.Example: MY_MODEL
branch_idThe branch ID.Example: 1.12

Sample request:

POST [indicium]/iam/sf/cancel_all_jobs
{
"model_id": "MY_PROJECT",
"branch_id": "MAIN"
}

Automate the Creation process​

This chapter describes how to automate the entire Creation process or its separate steps. You can run all steps at once with Execute all creation steps, or run each step on its own. Each Automate section below describes the procedure for one step, with its parameters and a sample request.

warning

All parameters are required, unless their description says otherwise. For some parameters, leaving them out will result in the use of their default values. If a required parameter is still empty, the call returns a 422 and no job is created. See Responses.

For more information on the Creation process and how to run it in the user interface, see Creation.

Wait for a Creation step to finish​

All Creation jobs return the (last) created job_id through an output parameter.

The wait for job procedure specifies that a Creation process waits until a specific job has been completed before continuing execution. Once that job has finished, the procedure will end automatically.

Use the following parameters:

ParameterDescriptionPossible values
job_idThe (integer) id of the job that has to be completed before continuing.Example: 123
show_msgShows a message about what went wrong if a job cannot be completed successfully.- 0 = No
- 1 = Yes

Sample request:

POST [indicium]/iam/sf/wait_for_job

{
"job_id": 123,
"show_msg": 1
}

Automate 'Execute all creation steps'​

You can automate the task Execute all creation steps using a POST request to Indicium.

Use the parameters below in the request to call add_job_to_do_complete_creation.

ParameterDescriptionPossible values
model_idThe ID of the model you want to create the deployment package for.Example: MY_MODEL
branch_idThe branch ID.Example: 1.12
execute_complete_creationDetermines whether all Creation steps are executed, or only a manual selection of them.
Note: Set every step parameter to true or false. To exclude a step, set it to false
- 1 = Execute all steps
- 0 = Select steps manually. Set the parameters below to true or false to include or exclude the step:
- generate_definition
- validate_definition
- generate_source_code
- execute_source_code
- run_sync
- execute_unit_tests
- execute_smoke_test
model_vrs_nameThe version name of the model for which you want to execute the creation steps. Required when run_sync is true. Saved as the version name of the model, so leaving it empty clears it.Example: 1.13
generate_definitionWhether to generate the definition.- true
- false
generate_definition_error_handlingWhat happens when a control procedure fails to execute properly while the definition is generated. Required when generate_definition is true. Leave empty when not generating the definition.- 0 = Pause and await user input
- 1 = Skip the control procedure in error and continue
- 2 = Abort generate definition
validate_definitionWhether to validate the definition.- true
- false
validate_definition_error_handlingHow the validation results affect the subsequent Creation steps. Required when validate_definition is true. Leave empty when not validating the definition.- 0 = Abort on errors
- 1 = Abort on warnings
- 2 = Abort on any validation message
- 3 = Always continue the subsequent Creation steps
generate_source_codeWhether to generate the source code.- true
- false
upgrade_methodDetermines the method for generating source code. Required when generate_source_code is true. Leave empty when not generating the source code. For more information, see Generation method.- 0 = Smart
- 1 = Full
write_code_filesWhether to write the generated source code to files. If undefined, the default creation preset or saved preference is used.- true
- false
write_prog_objectsWhether to write the generated program objects to files. If undefined, the default creation preset or saved preference is used.- true
- false
execute_source_codeWhether to execute the generated source code.- true
- false
runtime_configuration_idCode execution, unit test execution, and smoke test execution will all be done on the provided runtime configuration. If undefined, the default runtime configuration of the branch is used.
Note: this has to be the exact name of the runtime configuration as configured in the Software Factory. You cannot use an application id or application alias.
Example: default
execute_source_code_error_handlingWhat happens when a control procedure fails to execute properly while the source code is executed. Required when execute_source_code is true. Leave empty when not executing the source code.- 0 = Pause and await user input
- 1 = Skip the control procedure in error and continue
- 2 = Abort execute source code
run_syncWhether to run synchronization to IAM. Set to false when you do not want to synchronize. If the synchronization fails, the unit tests and smoke tests are canceled.- true
- false
sync_run_typeWhether to directly synchronize to IAM or to write a synchronization script to storage. Required when run_sync is true. Leave empty when not synchronizing.- 0 = Synchronize to IAM
- 1 = Synchronize to storage
sync_target_iam_idThe target IAM to synchronize with. If undefined, your last target IAM on this branch or the default target IAM is used.
Note: this has to be the exact value of the IAM configuration as configured in the Software Factory.
Example: 1
execute_unit_testsWhether to execute unit tests. Set to false when not executing the source code.- true
- false
execute_smoke_testWhether to execute smoke tests. Set to false when not executing the source code.- true
- false
debugRelevant during the Generate definition process. Logs when the branch is 'locked' and 'unlocked', and actions taken by the user after a process step has failed.- 1 = Enabled
- 0 = Disabled

Sample request:

POST [indicium]/iam/sf/add_job_to_do_complete_creation
{
"model_id": "MY_MODEL",
"branch_id": "1.12",
"execute_complete_creation": 0,
"model_vrs_name": "1.13",
"generate_definition": true,
"generate_definition_error_handling": 1,
"validate_definition": true,
"validate_definition_error_handling": 3,
"generate_source_code": true,
"upgrade_method": 0,
"write_code_files": false,
"write_prog_objects": false,
"execute_source_code": false,
"runtime_configuration_id": "default",
"execute_source_code_error_handling": 0,
"run_sync": true,
"sync_run_type": 0,
"sync_target_iam_id": 1,
"execute_unit_tests": false,
"execute_smoke_test": false,
"debug": 1
}

The task returns the job_id of the last step that you included, for example, the smoke test. To wait for the whole Creation process to finish, use this job_id in Wait for a Creation step to finish.

Automate 'Generate definition'​

Use the following parameters to call add_job_to_generate_definition:

ParameterDescriptionPossible values
model_idThe ID of the model for which you want to generate the definitions.Example: MY_MODEL
branch_idThe branch ID.Example: 1.12
error_handlingWhat happens when a control procedure fails to execute properly while the definition is generated.- 0 = Pause and await user input
- 1 = Skip the control procedure in error and continue
- 2 = Abort generate definition
debugLogs when the branch is 'locked' and 'unlocked', and actions taken by the user after a process step has failed.- 1 = Enabled
- 0 = Disabled

Sample request:

POST [indicium]/iam/sf/add_job_to_generate_definition

{
"model_id": "MY_MODEL",
"branch_id": "1.12",
"error_handling": 1,
"debug": 1
}

Automate 'Validate definition'​

Use the following parameters to call add_job_to_validate_all:

ParameterDescriptionPossible values
model_idThe ID of the model for which you want to validate the definition.Example: MY_MODEL
branch_idThe branch ID.Example: 1.12
validation_typeAllows execution of specific validation types. Leave empty to execute all validations.- 0 = Model
- 1 = Branching
- 2 = Requirements
- 3 = Datamodel
- 4 = User interface
- 5 = Process flows
- 6 = Application logic
- 7 = Documentation
- 8 = Dynamic model
- 9 = Validation
- 10 = Functionality
- 11 = Generation
- 12 = Test
- 13 = All (not: 'all validations', but: validation type 'All')
- 14 = Subroutines
- 15 = Access control
POST [indicium]/iam/sf/add_job_to_validate_all

{
"model_id": "MY_MODEL",
"branch_id": "1.12",
"validation_type": null
}

Automate 'Generate source code'​

Use the following parameters to call add_job_to_generate_code:

ParameterDescriptionPossible values
model_idThe ID of the model for which you want to generate the source code.Example: MY_MODEL
branch_idThe branch ID.Example: 1.12
upgrade_methodDetermines the method for generating source code. See Generation method.- 0 = Smart
- 1 = Full
write_code_files_to_diskWhether to write code files to storage.- 0 = No
- 1 = Yes
write_prog_objects_to_diskWhether to write program objects to storage.- 0 = No
- 1 = Yes

Sample request:

POST [indicium]/iam/sf/add_job_to_generate_code

{
"model_id": "MY_MODEL",
"branch_id": "1.12",
"upgrade_method": 0
}

Automate 'Source code execution'​

Use the following parameters to call add_job_to_execute_source_code or connect_to_db:

ParameterDescriptionPossible values
model_idThe ID of the model for which you want to execute the source code.Example: MY_MODEL
branch_idThe branch ID.Example: 1.12
runtime_configuration_idThe target for the source code execution.
Note: this has to be the exact name of the runtime configuration as configured in the Software Factory. You cannot use an application id or application alias.
Example: default
error_handlingWhat happens when a control procedure fails to execute properly while the code files are executed.- 0 = Abort the code execution
- 1 = Ignore the current code file and resume execution from the next code file
- 2 = Retry the current code file and resume execution from the next statement after the error occurred
- 3 = Suspend the code execution and wait for user input

Sample request:

POST [indicium]/iam/sf/add_job_to_execute_source_code

Or, to start the Source code execution job using Connect:

POST [indicium]/iam/sf/connect_to_db

For both options:

{
"model_id": "MY_MODEL",
"branch_id": "1.12",
"runtime_configuration_id": "default",
"error_handling": 1
}

Automate 'Unit test execution'​

Use the following parameters to call add_job_to_test_unit_test (all unit tests). Inactive unit tests will not be executed.

ParameterDescriptionPossible values
model_idThe ID of the model for which you want to execute the unit tests.Example: MY_MODEL
branch_idThe branch ID.Example: 1.12
runtime_configuration_idThe target for the source code execution.
Note: this has to be the exact name of the runtime configuration as configured in the Software Factory. You cannot use an application id or application alias.
Example: default

Sample request:

POST [indicium]/iam/sf/add_job_to_test_unit_test

{
"model_id": "MY_MODEL",
"branch_id": "1.12",
"runtime_configuration_id": "default"
}

Automate 'Smoke test execution'​

Use the following parameters to call add_job_to_run_smoke_tests.

ParameterDescriptionPossible values
model_idThe ID of the model for which you want to execute the unit tests.Example: MY_MODEL
branch_idThe branch ID.Example: 1.12
runtime_configuration_idThe target for the source code execution.
Note: this has to be the exact name of the runtime configuration as configured in the Software Factory. You cannot use an application id or application alias.
Example: default

Sample request:

POST [indicium]/iam/sf/add_job_to_run_smoke_tests
{
"model_id": "MY_MODEL",
"branch_id": "1.12",
"runtime_configuration_id": "default"
}
note

If you use a SQL query to execute this task, remove the host and db_name parameters from the execution query.

Automate Synchronization to IAM​

This chapter describes how to automate the synchronization to IAM.

For more information on the Synchronization process and how to run it in the user interface, see Synchronization to IAM.

Generate synchronization scripts​

Generating synchronization scripts is a prerequisite for synchronizing to either IAM or storage. During script generation, the synchronized model is automatically verified to ensure the quality and integrity of the model. For more information, see Verify synchronization.

Use the following parameters to call add_job_to_generate_sync_objects:

ParameterDescriptionPossible values
vrs_nameThe version name of the model for which you want to generate the synchronization scripts.Example: 1.13
model_idThe ID of the model for which you want to generate the synchronization scripts.Example: MY_MODEL
branch_idThe branch ID.Example: 1.12
sync_all_modulesOnly if a model includes modules, select if all modules should be included.- 1 = Yes
- 0 = No
deployment_modulesOnly if a model includes modules, select if you wish to include a collection of modules.
If you select a collection of modules, set parameter sync_all_modules to 0.
If this parameter is empty and sync_all_modules equals 0, then the last configuration of modules will be used.
Example: <deployment_module_id>Module1</deployment_module_id><deployment_module_id>Module2</deployment_module_id><deployment_module_id>Module3</deployment_module_id>

Sample request:

POST [indicium]/iam/sf/add_job_to_generate_sync_objects

{
"vrs_name": "1.13",
"model_id": "MY_MODEL",
"branch_id": "1.12",
"sync_all_modules": 1,
"deployment_modules": null
}

Automate task Synchronize to IAM​

After generating the synchronization scripts as described above, you can start the synchronization to IAM:

Use the following parameters to call add_job_to_sync_to_iam:

ParameterDescriptionPossible values
vrs_nameThe version name of the model for which you want to synchronize to IAM.Example: 1.13
model_idThe ID of the model you want to synchronize to IAM.Example: MY_MODEL
branch_idThe branch ID.Example: 1.12
sync_target_iam_idRequires the unique identifier of the IAM configuration.
API targets need pool user credentials.
Note: this has to be the exact value of the IAM configuration as configured in the Software Factory.
Example: 1
POST [indicium]/iam/sf/add_job_to_sync_to_iam

{
"vrs_name": "1.13",
"model_id": "MY_MODEL",
"branch_id": "1.12",
"sync_target_iam_id": 1
}

Automate task Synchronize to storage​

After generating the synchronization scripts as described above, you can start the synchronization to storage.

Use the following parameters to call add_job_to_sync_to_disk:

ParameterDescriptionPossible values
model_idThe ID of the model you want to synchronize to storage.Example: MY_MODEL
vrs_nameAdd the name of the model version to write the synchronization scripts to an alternate path. The scripts will be written to \\server\base_path\model\model_vrs_name instead of ...\branch.Example: 1.13
branch_idThe branch ID.Example: 1.12
deployment_packageDecides if the job is used for a deployment package and therefore written to the Deploy folder instead of the root of the model specification folder.- 1 = Yes
- 0 = No

Sample request:

POST [indicium]/iam/sf/add_job_to_sync_to_disk

{
"model_id": "MY_MODEL",
"vrs_name": "1.13",
"branch_id": "1.12",
"deployment_package": 0
}

Automate the creation of a deployment package​

Use the following parameters to call the task_start_deployment_package:

ParameterDescriptionPossible values
model_idThe ID of the model you want to create the deployment package for.Example: MY_MODEL
model_vrs_nameThe version name of the model for which you want to create the deployment package.Example: 1.13
branch_idThe branch ID.Example: 1.12
upgrade_methodDetermines the method for generating source code. See Generation method.- 0 = Smart
- 1 = Full
deployment_noteOptional. The reason why you create the deployment package.Example: The reason why you create the deployment package.

Sample request:

POST [indicium]/iam/sf/start_deployment_package

{
"model_id": "MY_MODEL",
"model_vrs_name": "1.13",
"branch_id": "1.12",
"upgrade_method": 0,
"deployment_note": "The reason why you create the deployment package."
}

Responses​

Deployment automation calls respond as follows:

  • 200 - OK - The job is queued. The call responds directly after queuing the job. Tasks that create a job return its job_id.
  • 400 - Bad Request - No job is created. A parameter does not exist for this task, or a value has the wrong data type. The response body names the parameter.
  • 403 - Forbidden - No job is created. The task is not available at that moment, or a value is not allowed for a lookup parameter.
  • 422 - Unprocessable Entity - No job is created. The task rejected the request, or a mandatory parameter is empty, for example, model_vrs_name when run_sync is true. The reason is in the TSFMessages header.

Automate the creation of the infrastructure​

In certain cases, for example, if you want to deploy your application to multiple tenants, you might also want to automate the configuration of the infrastructure.

For an overview of third-party tools that you can use to do this, see Configuration management.


Was this article helpful?