Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Introduction

For JS7 - Automated Deployment On Premises use of a Deployment Server Area is recommended.

The Deployment Server Area is used for the following purposes:

  • to hold the script environment for JS7 - Automated Installation and Update and the JS7 - Deployment Packaging Script,
  • to hold the configuration files and optionally certificates for deployment with of JS7 componentsproducts,
  • to hold the JS7 installation files per JS7 release and component product such as JOC Cockpit, Controller, Agent,
  • to hold the archive of deployment packages Deployment Packages per JS7 releases and target machinehost,
  • to operate a JS7 Agent that is used to perform the JS7 - Deployment Workflow.

Purpose

Use of a Deployment Server Area is beneficial for the following purposes:

  • Desired State Configuration
    • The JS7 - Deployment Descriptor specifies the desired state of the installation and configuration on a number of target machinehosts.
    • The concept includes not to deploy individual files or configuration items but to view an installation holistically with all installation files and configuration files being deployed to guarantee consistency.
  • Provisioning
    • Considering Desired State Configuration it makes no difference if a JS7 component is product will be initially installed, is will be updated, upgraded or patched.
    • Deployment processes are repeatable at any time. This suggests not to rely on backups of target machines hosts for the purpose of restoring JS7 components in products in case of data loss in the target machine. Instead, deployment is repeated in case that a target machine host has been newly to be set up from scratch. Consider what which data will be lost in case that a target machinehost's file system will crash:
      • Log Data: retention of older JS7 component product log files might not be too relevant your primary concern in a crash situation. At the same time most recent additions to log files might anyway be lost. Consider that log data exclude job logs and order logs that are streamed in near real-time from Agents via Controllers Controller instances to the JOC Cockpit database.
      • Transaction Data: due to the ephemeral nature of JS7 - Order State Transitions there is no way to in consistently backup backing up a Controller's or Agent's journal. Instead, clustering of Controllers Controller and Agents Agent instances on separate machines hosts brings the required redundancy.
      • For details see JS7 - How to backup the job scheduling environment.
  • Probing
    • The deployment process includes to temporarily install JS7 components in the working area products in a temporary work directory of the Deployment ServerArea
    • This allows users to check if all required configuration files including certificates are in place.
    • In most situations it will be possible to start up the JS7 component on products in the Deployment ServerArea. This might not include for example to run jobs with a JS7 Agent as the job environment might not be available with the Deployment ServerArea. However, it allows to check if the JS7 component product will perfectly start - using the expected configuration items such as certificates - and will terminate normally. In addition it includes to check the JS7 componentproduct's log files for warnings and errors on start-up and termination.
  •  Parallelism
    • During upgrade to newer minor JS7 releases users might find an inconsistent status of JS7 componentsproducts for a short period of time.
      • This applies to upgrading, for example from a 2.2.1 release to a 2.4.1 release. 
      • This does not apply to updating, for example from a 2.2.1 release to a 2.2.3 release.
    • A newer Controller release 2.5.1 might not work with an older Agent release 2.2.3. As the Controller has to be upgraded before Agents are upgraded we users might find a period during which no jobs are executed on Agents using older releases. In fact the related orders will not be lost, however, they will be put to the BLOCKED state until the Agent is upgraded. It is therefore preferable to have the period duration for upgrading a larger number of Agents as short as possible.
    • The JS7 - Deployment Workflow provides unlimited parallelism for deployments as it can run a larger number thousands of tasks , >15000, in parallel on the same Agent.
      • Typically the time to shut down a JS7 Agent, to replace its installation and to restart the JS7 Agent requires less than 60s.
      • When stopping Agents Agent instances during the deployment procedure this will allow the an individual Agent to delay termination until any running tasks are completed. This includes to delay the update/upgrade process. At the same time this guarantees that no running tasks are killed. However, users can force immediate termination of an AgentAgents during deployment, see JS7 - Agent Command Line Operation.
  • Fallback
    • Though use of a Deployment Server Area allows probing to some extent there might be situations when deployment to a target machine host fails. Such situations frequently do not suggest lengthy analysis of problems with the target machine host but require immediate action to roll back the installation and to fall back to the a previous release.
    • With Deployment Packages and Deployment Descriptors for previous releases being available on from the Deployment Server Area users can start initiate the fallback procedure to deploy a previous release within seconds.
    • Error handling in the Deployment Workflow Workflows allows to decide if deployments are considered being failed for example with a single Agent not being successfully deployed or if user intervention is required to decide if processing of the Deployment Workflow should be cancelled or if execution for individual target machines is hosts should be retried.

Prerequisites

The JS7 - Deployment Packaging requires the jq utility to be available from the operating system. 

Version 1.6 of jq is available from the js7_deploy.tar.gz archive, see Download section, and ships with the MIT license, see https://opensource.org/licenses/MIT.

No additional No specific software requirements apply to a Deployment ServerArea. The following factors resources should be considered:

  • Storage
    • Storage capacity has to match the number of packages Deployment Packages that are stored per JS7 release, per JS7 component product and target machineshost.
      • Example
        • Assume that the Deployment Server Area is used to deploy JS7 Agents to 100 target machineshosts.
        • The average disk space consumption of a JS7 Agent package is around 175 MB.
        • If you users intend to keep the latest three JS7 releases then this will make 300 packages with an overall disk space consumption of caapprox. 53 GB.
    • The working area work directory in the Deployment Server Area is used to temporarily store JS7 installations. A rough estimate of 10 GB will be sufficient for most purposes.
    • Storage for JS7 release tarballs installation files should be considered. For Unix environments the tarballs for JOC Cockpit, Controller and Agent require approx. 600 MB per release.
  • Computing Power
    • Speed matters only when it comes to packaging. This However, this process is performed only once per new JS7 release that should be deployed.
    • It can be considered a waste of resources having a powerful server being used <1% of the time as computing power is required for the packaging step only. Users should identify a way how to allocate computing resources exclusively in case that they are needed.
  • Network
    • The host operating the Deployment Server Area requires decent connectivity as it has to connect to any target machine hosts to which it deploys JS7 componentsJS7 products should be deployed.
      • Network connections are established from the Deployment Area's server to the target hosts, not vice versa.
      • Considering firewalls users could might think about "opening the gates" for the timeslot of deployment only.
    • Transfer of tarball packages to target machines preferably hosts preferably happens in parallel in order to have a short period of time in which mixed releases of JS7 components products are in place.

Security

It is essential to have a consistent and secure deployment process in place.

  • Security is the basic reason why the JS7 deployment scripts ship as shell scripts and not from a high level programming language that might require installation and updates. Transparency and adjustability are key. Users are free to modify deployment scripts at their will and to request changes within the scope of SOS professional services.
  • The source of JS7 installation tarballs is a major concern. Basically the installer scripts for JS7 components products offer to download components on demand products from the SOS Web Site on demand. Users are strongly discouraged to make use of this feature for automated deployment. Instead, the JS7 components products should be separately downloaded and checked that no tampered versions of the installer files have been download to exclude man-in-the-middle attacksdownloaded.
  • Good understanding of the deployment process and of the working of deployment scripts is key for security.

Directory Layout

The suggested directory layout for the Deployment Server includes the following directories and files:

...

  • js7_deploy_agent_unix.<agent-id>.<release>.config.tar.gz (deployment package for the Agent's configuration directory)
  • js7_deploy_agent_unix.<agent-id>.<release>.install.tar.gz (deployment package for the Agent's installation directory)
  • run_deploy_agent.sh (deployment script)
  • run_install_agent.sh (wrapper script for parameterized call to js7_install_agent.sh)

...

  • <controller-id> (specifies the Controller ID)
    • <controller-type> (specifies the type of the Controller instance which is primary or secondary
      • js7_deploy_controller_unix.<controller-id>.<controller-type>.<release>.config.tar.gz (deployment package for the Controller instance's configuration directory)
      • js7_deploy_controller_unix.<controller-id>.<controller-type>.<release>.install.tar.gz (deployment package for the Controller instance's installation directory)
      • run_deploy_controller.sh (deployment script)
      • run_install_controller.sh (wrapper script for parameterized call to js7_install_controller.sh)
    • <controller-type> (specifies the type of the Controller instance which is primary or secondary

...

...

  • certs (holds CA-signed Certificates)
  • csr (holds Certificate Signing Requests)
  • private (holds Private Keys)

...

  • config (general configuration)
    • private (specific configuration)
      • trusted-pgp-keys (optionally holds PGP public key files and keyring files used for signing, see JS7 - Deployment of Scheduling Objects)
        • <pgp-public-key> (public key file or keyring file)
        • <pgp-public-key> (public key file or keyring file)
        • ...
      • trusted-x509-keys (optionally holds X.509 certificate files used for signing, see JS7 - Deployment of Scheduling Objects)
        • <x509-certificate> (X.509 certificate file)
        • <x509-certificate> (X.509 certificate file)
        • ...
      • https-keystore.p12 (optional default location and file name of a PKCS12 truststore)
      • https-truststore.p12 (optional default location and file name of a PKCS12 truststore)
      • private.conf (optional configuration file, for example to specify keystore, truststore and Distinguished Names of Controller certificate, see JS7 - Agent Configuration Items)
      • log4j2.xml (optional log configuration file, see JS7 - Log Levels and Debug Options)
    • agent.conf (optional configuration file, see JS7 - Agent Configuration Items)

...

  • <template-name> (arbitrary directories for templates can be used)
  • <template-name> (arbitrary directories for templates can be used)
  • ...

...

  • <root-ca-certificate> (the Root CA Certificate file, frequently available with a .pem, .crt extension)

...

Anchor
download
download
Download

A tarball of the directories and scripts that make up the Deployment Area is provided per JS7 release. 

For download refer to JS7 - Download and select the js7_deploy.tar.gz tarball.

Download can be performed using curl for example with the following URL (users should consider to download from the latest release):

Code Block
languagebash
titleDownload Deployment Area tarball from SOS Web Site
curl "https://download.sos-berlin.com/JobScheduler.2.5/js7_deploy.tar.gz" --output "js7_deploy.tar.gz"

Deployment Steps

Deployment is performed by the following steps:

  • Create the JS7 - Deployment Descriptor from a .json file.
  • Run the JS7 - Deployment Packaging script indicating the .json Deployment Descriptor file. This step will create related Deployment Packages in the <archive>/<deployment-descriptor> directory.
  • Perform deployment by applying one of the following strategies:
    • Run the Deployment Script created from the previous step.
      • The script is available from the <archive>/<deployment-descriptor>/run_deploy.sh file and can be executed from the command line.
    • Run the JS7 - Deployment Workflow
      • Import the js7_import.tar.gz Deployment Workflow file available from the <archive>/<deployment-descriptor> directory to JOC Cockpit, for details see JS7 - Deployment Workflow.
      • Check the imported workflow and adjust to your needs, for example assignment of an Agent with access to the deployment directories in the Deployment Area.
      • Adjust the imported schedule to your needs should you want to schedule execution of deployments for a specific date and time. Alternatively you can add an ad hoc order to the Deployment Workflow from the JOC Cockpit's Workflows view. This step offers to copy the parameterization available from the schedule to the current order.

Resources

...

  • config (general configuration)
    • private (specific configuration)
      • trusted-pgp-keys (optionally holds PGP public key files and keyring files used for signing, see JS7 - Deployment of Scheduling Objects)
        • <pgp-public-key> (public key file or keyring file)
        • <pgp-public-key> (public key file or keyring file)
        • ...
      • trusted-x509-keys (optionally holds X.509 certificate files used for signing, see JS7 - Deployment of Scheduling Objects)
        • <x509-certificate> (X.509 certificate file)
        • <x509-certificate> (X.509 certificate file)
        • ...
      • https-keystore.p12 (optional default location and file name of a PKCS12 truststore)
      • https-truststore.p12 (optional default location and file name of a PKCS12 truststore)
      • private.conf (optional configuration file, for example to specify keystore, truststore and Distinguished Names of JOC Cockpit certificate, see JS7 - Controller Configuration Items)
      • log4j2.xml (optional log configuration file, see JS7 - Log Levels and Debug Options)
    • controller.conf (optional configuration file, see JS7 - Controller Configuration Items)

...

  • <template-name> (arbitrary directories for templates can be used)
  • <template-name> (arbitrary directories for templates can be used)
  • ...

...

  • instances (holds configuration files that are specific for a JOC Cockpit instance)
    • <server>.<instance-type> (holds configuration files for a JOC Cockpit instance running on a specific server with the instance type being primary or secondary)
      • resources (optionally holds configuration such as the joc.properties file, keystore, truststore files etc.)
      • response (holds response files, mainly the joc_install.xml response file, that are copied to the JOC Cockpit's setup directory)
    • <server>.<instance-type> (holds configuration files for a JOC Cockpit instance running on a specific server with the instance type being primary or secondary)
    • ...
  • templates (holds configuration files that act as templates for a number of JOC Cockpit instances)
    • <template-name> (arbitrary directories for templates can be used)
      • resources (optionally holds configuration such as the joc.properties file, keystore, truststore files etc.)
      • response (holds response files, mainly the joc_install.xml response file, that are copied to the JOC Cockpit's setup directory)
    • <template-name> (arbitrary directories for templates can be used)
    • ...

...

  • ... (users can apply an arbitrary directory hierarchy at this level)
    • js7_agent_unix.<release>.tar.gz (JS7 Agent installation tarball as download from the SOS Web Site)
    • js7_controller_unix.<release>.tar.gz (JS7 Controller installation tarball as download from the SOS Web Site)
    • js7_joc_linux.<release>.tar.gz (JS7 JOC Cockpit installation tarball as download from the SOS Web Site)

...

  • ... (sub-directory used for Agent installation)

...

  • ... (sub-directory used for Controller installation)

...

Explanation on Individual Files

Environment Script: env.sh

The Environment Script initializes a number of environment variables that map to directories as explained above.

...

Code Block
titleExample for Environment File env.sh
linenumberstrue
#!/bin/sh

SCRIPT_HOME=$HOME/js7.deploy

DEP_ARCHIVE="${DEP_ARCHIVE:-$SCRIPT_HOME/archive}"
DEP_BIN="${DEP_BIN:-$SCRIPT_HOME/bin}"
DEP_CONFIG="${DEP_CONFIG:-$SCRIPT_HOME/config}"
DEP_DESC="${DEP_DESC:-$SCRIPT_HOME/desc}"
DEP_INSTALL="${DEP_INSTALL:-$SCRIPT_HOME/install}"
DEP_RELEASE=/mnt/releases/scheduler_setups
DEP_TARGET="/home/sos/js7.target"
DEP_WORK="${DEP_WORK:-$SCRIPT_HOME/work}"

JAVA_HOME="${SCRIPT_HOME}"/jdk-11.0.2
PATH=${JAVA_HOME}/bin:${PATH}

export JAVA_HOME PATH DEP_ARCHIVE DEP_BIN DEP_CONFIG DEP_DESC DEP_INSTALL DEP_RELEASE DEP_TARGET DEP_WORK

...

Code Block
titleExample for Environment File env.sh
linenumberstrue
. ./env.sh

Deployment Scripts: run_deploy_agent.sh, run_deploy_controller.sh

Status
colourYellow
titleTODO

Installer Scripts: run_install_agent.sh, run_install_controller.sh

Status
colourYellow
titleTODO

Resources