Page History
...
- JS7 JOC Cockpit can be configured to interface with Git repositories to store and to rollout its configuration objects such as workflows and jobs.
- Configuration objects can be versioned (tagged) with Git and can be rolled out to different JS7 environments via Git. This allows to create and to test workflows in a development environment and to perform rollouts to a production environment by use of a Git repository.
- A connection to a Git repository is considered an additional option to manage versions and rollouts of JS7 configuration objects.
- The Git Repository Interface is made available in two steps:
Display feature availability StartingFromRelease 2.3.0 - Release 2.3.0: Make JS7 objects available from the file system to allow use of external Git tools.
Jira server SOS JIRA columns key,summary,type,created,updated,due,assignee,reporter,priority,status,resolution serverId 6dc67751-9d67-34cd-985b-194a8cdc9602 key JOC-1144
- Release 2.4.0: Offer the GUI functionality from JOC Cockpit to manage JS7 objects with Git.
Jira server SOS JIRA columns key,summary,type,created,updated,due,assignee,reporter,priority,status,resolution serverId 6dc67751-9d67-34cd-985b-194a8cdc9602 key JOC-1213 Jira server SOS JIRA columns key,summary,type,created,updated,due,assignee,reporter,priority,status,resolution serverId 6dc67751-9d67-34cd-985b-194a8cdc9602 key JOC-1214 Jira server SOS JIRA columns key,summary,type,created,updated,due,assignee,reporter,priority,status,resolution serverId 6dc67751-9d67-34cd-985b-194a8cdc9602 key JOC-1215
...
Flowchart |
---|
USER1 [label="User: 1",fillcolor="lightskyblue",fontname="Arial",fontsize="10pt"] USER2 [label="User: 2",fillcolor="lightskyblue",fontname="Arial",fontsize="10pt"] USER3 [label="User: 3",fillcolor="lightskyblue",fontname="Arial",fontsize="10pt"] FOLDER1 [label="Folder: 1",fillcolor="white",fontname="Arial",fontsize="10pt"] FOLDER1a [label="Sub-folder: 1.1",fillcolor="white",fontname="Arial",fontsize="10pt"] FOLDER1b [label="Sub-folder: 1.2",fillcolor="white"] FOLDER2 [label,fontname="Folder: 2Arial",fillcolorfontsize="white10pt"] FOLDER3FOLDER2 [label="Folder: 32",fillcolor="white",fontname="Arial",fontsize="10pt"] FOLDER3 [label="Folder: 3",fillcolor="white",fontname="Arial",fontsize="10pt"] REPOSITORY1L [shape="ellipse",label="Repository: 1-local\njob resources etc.",fillcolor="darkolivegreen1",fontname="Arial",fontsize="10pt"] REPOSITORY1R [shape="ellipse",label="Repository: 1-rollout\nworkflows etc.",fillcolor="darkolivegreen1",fontname="Arial",fontsize="10pt"] REPOSITORY2L [shape="ellipse",label="Repository: 2-local\njob resources etc.",fillcolor="darkolivegreen1",fontname="Arial",fontsize="10pt"] REPOSITORY2R [shape="ellipse",label="Repository: 2-rollout\nworkflows etc.",fillcolor="darkolivegreen1",fontname="Arial",fontsize="10pt"] REPOSITORY3L [shape="ellipse",label="Repository: 3-local\njob resources etc.",fillcolor="darkolivegreen1",fontname="Arial",fontsize="10pt"] REPOSITORY3R [shape="ellipse",label="Repository: 3-rollout\nworkflows etc.",fillcolor="darkolivegreen1 etc.",fillcolor="darkolivegreen1",fontname="Arial",fontsize="10pt"] USER1 -> FOLDER1 [label=" can access ",fontname="Arial",fontsize="10pt"] USER2 -> FOLDER1 [label=" can access ",fontname="Arial",fontsize="10pt"] USER2 -> FOLDER2 [label=" can access ",fontname="Arial",fontsize="10pt"] USER3 -> FOLDER3 [label=" can access ",fontname="Arial",fontsize="10pt"] FOLDER1 -> FOLDER1a [label=" includes ",fontname="Arial",fontsize="10pt"] FOLDER1 -> FOLDER1b [label=" includes ",fontname="Arial",fontsize="10pt"] FOLDER1a -> REPOSITORY1L [label=" maps to ",fontname="Arial",fontsize="10pt"] FOLDER1a -> REPOSITORY1R [label=" maps to ",fontname="Arial",fontsize="10pt"] FOLDER1b -> REPOSITORY1L [label=" maps to ",fontname="Arial",fontsize="10pt"] FOLDER1b -> REPOSITORY1R [label=" maps to ",fontname="Arial",fontsize="10pt"] FOLDER2 -> REPOSITORY2L [label=" maps to ",fontname="Arial",fontsize="10pt"] FOLDER2 -> REPOSITORY2R [label=" maps to ",fontname="Arial",fontsize="10pt"] FOLDER3 -> REPOSITORY3L [label=" maps to ",fontname="Arial",fontsize="10pt"] FOLDER3 -> REPOSITORY3R [label=" maps to ",fontname="Arial",fontsize="10pt"] |
The mapping of folder objects to repositories implies
...
Flowchart |
---|
USER1a [label=" User: 1a ",fillcolor="lightskyblue1",fontname="Arial",fontsize="10pt"] USER1b [label=" User: 1b ",fillcolor="lightskyblue1",fontname="Arial",fontsize="10pt"] USER2 [label=" User: 2 ",fillcolor="lightskyblue2",fontname="Arial",fontsize="10pt"] USER3 [label=" User: 3 ",fillcolor="lightskyblue3 ",fillcolor="lightskyblue3",fontname="Arial",fontsize="10pt"] JOC1 [label=" JOC Cockpit: dev ",fillcolor="lightskyblue1",fontname="Arial",fontsize="10pt"] JOC2 [label=" JOC Cockpit: test ",fillcolor="lightskyblue2",fontname="Arial",fontsize="10pt"] JOC3 [label=" JOC Cockpit: prod ",fillcolor="lightskyblue3",fontname="Arial",fontsize="10pt"] FOLDER1 [label=" Folder: 1 (dev) ",fillcolor="white",fontname="Arial",fontsize="10pt"] FOLDER2 [label=" Folder: 1 (test) ",fillcolor="white",fontname="Arial",fontsize="10pt"] FOLDER3 [label=" Folder: 1 (prod) ",fillcolor="white",fontname="Arial",fillcolorfontsize="white10pt"] DATABASE1 [shape="ellipse",label=" Database: dev ",fillcolor="lightskyblue1",fontname="Arial",fontsize="10pt"] DATABASE2 [shape="ellipse",label=" Database: test ",fillcolor="lightskyblue2",fontname="Arial",fontsize="10pt"] DATABASE3 [shape="ellipse",label=" Database: prod ",fillcolor="lightskyblue3",fontname="Arial",fontsize="10pt"] REPO1L [shape="ellipse",label="Repository: 1-dev-local\njob resources etc.",fillcolor="darkolivegreen1",fontname="Arial",fontsize="10pt"] REPO1R [shape="ellipse",label="Repository: 1-dev-rollout\nworkflows etc.",fillcolor="darkolivegreen1",fontname="Arial",fontsize="10pt"] REPO2L [shape="ellipse",label="Repository: 1-test-local\njob resources etc.",fillcolor="darkolivegreen2resources etc.",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"] REPO2R [shape="ellipse",label="Repository: 1-test-rollout\nworkflows etc.",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"] REPO3L [shape="ellipse",label="Repository: 1-prod-local\njob resources etc.",fillcolor="darkolivegreen3",fontname="Arial",fontsize="10pt"] REPO3R [shape="ellipse",label="Repository: 1-prod-rollout\nworkflows etc.",fillcolor="darkolivegreen3",fontname="Arial",fontsize="10pt"] { rank = same; JOC1 -> DATABASE1 } { rank = same; JOC2 -> DATABASE2 } { rank = same; JOC3 -> DATABASE3; } JOC1 -> FOLDER1 FOLDER1 -> REPO1L [label=" commit\n push/pull ",fontname="Arial",fontsize="10pt"] FOLDER1 -> REPO1R [label=" commit\n push/pull ",fontname="Arial",fontsize="10pt"] JOC2 -> FOLDER2 FOLDER2 -> REPO2L [label=" commit\n push/pull ",fontname="Arial",fontsize="10pt"] FOLDER2 -> REPO2R [label=" commit\n push/pull ",fontname="Arial",fontsize="10pt"] JOC3 -> FOLDER3 FOLDER3 -> REPO3L [label=" commit\n push/pull ",fontname="Arial",fontsize="10pt"] FOLDER3 -> REPO3R [label=" commit\n push/pull ",fontname="Arial",fontsize="10pt"] REPO1R -> REPO2R [label=" copy ",fontname="Arial",fontsize="10pt"] REPO2R -> REPO3R [label=" copy ",fontname="Arial",fontsize="10pt"] USER1a -> JOC1; USER1b -> JOC1; USER2 -> JOC2; USER3 -> JOC3; |
...
Flowchart |
---|
USER1a [label=" User: 1a ",fillcolor="lightskyblue1 ",fillcolor="lightskyblue1",fontname="Arial",fontsize="10pt"] USER1b [label=" User: 1b ",fillcolor="lightskyblue1",fontname="Arial",fontsize="10pt"] USER2a [label=" User: 2a ",fillcolor="lightskyblue2",fontname="Arial",fontsize="10pt"] USER2b [label=" User: 2b ",fillcolor="lightskyblue2",fontname="Arial",fontsize="10pt"] USER3 [label=" User: 3 ",fillcolor="lightskyblue3",fontname="Arial",fontsize="10pt"] JOC1a [label="JOC Cockpit: dev 1a",fillcolor="lightskyblue1",fontname="Arial",fontsize="10pt"] JOC1b [label="JOC Cockpit: dev 1b dev 1b",fillcolor="lightskyblue1",fontname="Arial",fillcolorfontsize="lightskyblue110pt"] JOC2 [label="JOC Cockpit: test",fillcolor="lightskyblue2",fontname="Arial",fontsize="10pt"] JOC3 [label="JOC Cockpit: prod",fillcolor="lightskyblue3",fontname="Arial",fontsize="10pt"] #DATABASE1a [shape="ellipse",label="Database: dev 1a",fillcolor="lightskyblue1",fontname="Arial",fontsize="10pt"] #DATABASE1b [shape="ellipse",label="Database: dev 1b",fillcolor="lightskyblue1",fontname="Arial",fontsize="10pt"] #DATABASE2 [shape="ellipse",label="Database: test",fillcolor="lightskyblue2",fontname="Arial",fontsize="10pt"] #DATABASE3 [shape="ellipse",label="Database: prod",fillcolor="lightskyblue3",labelfontname="Database: prodArial",fillcolorfontsize="lightskyblue310pt"] REPO1L1 [shape="ellipse",label="Repository: dev-local-1a\njob resources etc.",fillcolor="darkolivegreen1",fontname="Arial",fontsize="10pt"] REPO1L2 [shape="ellipse",label="Repository: dev-local-1b\njob resources etc.",fillcolor="darkolivegreen1",fontname="Arial",fontsize="10pt"] REPO1R [shape="ellipse",label="Repository: dev-rollout\nworkflows etc.",fillcolor="darkolivegreen1",fontname="Arial",fontsize="10pt"] REPO2L [shape="ellipse",label="Repository: test-local\njob resources etc.",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"] REPO2R [shape="ellipse",label="Repository: test-rollout\nworkflows etc.",fillcolor="darkolivegreen2",fontname="Arial",fontsize="10pt"] REPO3L [shape="ellipse",label="Repository: prod-local\njob resources etc.",fillcolor="darkolivegreen3 etc.",fillcolor="darkolivegreen3",fontname="Arial",fontsize="10pt"] REPO3R [shape="ellipse",label="Repository: prod-rollout\nworkflows eetc.",fillcolor="darkolivegreen3",fontname="Arial",fontsize="10pt"] #{ rank = same; JOC1a -> DATABASE1a } #{ rank = same; JOC1b -> DATABASE1b } #{ rank = same; JOC2 -> DATABASE2 } #{ rank = same; JOC3 -> DATABASE3; } JOC1a -> REPO1L1 [label=" commit/push/pull ",fontname="Arial",fontsize="10pt"] JOC1a -> REPO1R [label=" commit/push/pull ",fontname="Arial",fontsize="10pt"] JOC1b -> REPO1L2 [label=" commit/push/pull ",fontname="Arial",fontsize="10pt"] JOC1b -> REPO1R [label=" commit/push/pull ",fontname="Arial",fontsize="10pt"] JOC2 -> REPO2L [label=" commit/push/pull ",fontname="Arial",fontsize="10pt"] JOC2 -> REPO2R [label=" commit/push/pull ",fontname="Arial",fontsize="10pt"] JOC3 -> REPO3L [label=" commit/push/pull ",fontname="Arial",fontsize="10pt"] JOC3 -> REPO3R [label=" commit/push/pull ",fontname="Arial",fontsize="10pt"] REPO1R -> REPO2R [label=" copy ",fontname="Arial",fontsize="10pt"] REPO2R -> REPO3R [label=" copy ",fontname="Arial",fontsize="10pt"] USER1b -> JOC1b USER1a -> JOC1a USER2a -> JOC2 USER2b -> JOC2 USER3 -> JOC3 |
Operations
JOC Cockpit operations and Git operations are the same as for the above Scenarioscenario: Single Client - Multiple Repositories.
...
- Job Development in a dev environment
- JOC Cockpit Operations
- A number of configuration objects, e.g. workflows, are created or changed by a job developer.
- On completion of the change the job developer deploys the workflows to Controller and Agents to perform functional tests in the dev environment.
- With functional tests being successful the developer
- stores changes of workflows and related rollout objects to the local dev-rollout repository, commits changes and pushes changes to the remote dev-rollout repository.
- optionally stores changes of local objects such as job resources to the local dev-local repository, commits changes and pushes changes to the remote dev-local repository.
- JOC Cockpit Operations
- Integration Testing in a test environment:
- Git Operations
- A tester with access to the job developer's remote dev-rollout repository adopts current changes.
- The tester copies changes from the job developer's remote dev-rollout repository (source) to the remote test-rollout repository (target) by Git operations that are performed with a Git Client outside of JOC Cockpit.
- JOC Cockpit Operations
- The tester pulls changes from the remote test-rollout repository to the local test-rollout repository and updates the JOC Cockpit instance from the local test-rollout repository.
- The tester adjusts local objects such as job resources as required by the change.
- The tester deploys changed workflows and related local objects to Controller and Agents to perform integration testing.
- On completion of integration tests with changes being approved the tester
- tags the latest commit in the remote test-rollout repository with a label, e.g.
v2.3-approved
.- Should the tester modify workflows then the tester commits changes to the local test-rollout repository and pushes changes to the remote test-rollout repository before tagging.
- Some users might deny object modifications to be performed in a test environment and instead prefer to apply modifications in dev environments only.
- optionally stores changes of local objects to the local test-local repository, commits changes and pushes changes to the remote test-local repository.
- tags the latest commit in the remote test-rollout repository with a label, e.g.
- Git Operations
- Production Rollout to a prod environment
- Git Operations
- An operator with access to the tester's test-rollout repository adopts the current changes and checks out the tag
v2.3-approved
. - The operator copies changes from the remote test-rollout repository (source) to the remote prod-rollout repository (target) by Git operations that are performed with a Git Client outside of JOC Cockpit.
- The operator tags changes in the remote prod-rollout repository with a label, e.g.
v2.3
.
- An operator with access to the tester's test-rollout repository adopts the current changes and checks out the tag
- JOC Cockpit Operations
- The operator pulls changes from the remote prod-rollout repository tag
v2.3
to the local prod-rollout repository and updates the JOC Cockpit instance from the local prod-rollout repository. - The operator adjusts local objects such as job resources as required by the change. The operator optionally stores changes of local objects to the local prod-local repository, commits changes and pushes changes to the remote prod-local repository.
- The operator deploys changed workflows and local objects to Controller and Agents for production use.
- The operator pulls changes from the remote prod-rollout repository tag
- Git Operations
...
- Job Development and Integration Testing are explained from the above Use Caseuse case: Lifecycle Support for Workflow Changes.
- Production Rollout
- Operations performed by a Git Client external to JOC Cockpit
- Copy changes from the remote test-rollout repository (source) to the remote prod-rollout repository (target).
- Tag changes with a label in the prod-rollout repository.
- Operations performed by use of the JS7 REST Web Service API
- Pull changes from the remote prod-rollout repository identified by the respective tag to the local prod-rollout repository.
- Update the JOC Cockpit instance from the local prod-rollout repository.
- Deploy changed workflows to Controller and Agents for production use.
- Operations performed by a Git Client external to JOC Cockpit
...
Overview
Content Tools