Page History
...
- JS7 JOC Cockpit can be configured to interface with Git repositories to store its configuration objects such as workflows and jobs.
- JS7 supports use of GitLab servers.
- JS7 makes use of the GitLab REST API.
- Configuration objects can be versioned (tagged) and can be rolled out to different JS7 instances via Git. This allows to create and to test workflows in a development environment and to perform a rollout to a production environment by use of a Git repository.
- JOC Cockpit is the leading system to store configuration objects in its database. A connection to a Git repository is considered an additional option to manage versions and rollouts of JS7 configuration objects.
Display feature availability StartingFromRelease 2.2.0
Object Mappings
Configuration Objects
Environment-independent Objects
JS7 configuration objects that can be added to a Git repository should be rolled out across environments include
- Workflows
- Locks
- File Order Sources
- Notice Boards
Such objects can be managed with JS7 in a way that allows to re-use the objects - without any changes - across rollout environments such as dev, test, prod.
Environment-related Objects
The following configuration objects typically hold configuration items values that can be specific for an individual rollout environment and therefore optionally can be excluded from a Git repository.are added to a separate branch. Such objects should not be rolled out across environments.
- Job Resources
- Calendars
- Schedules
...
Info | ||
---|---|---|
| ||
If merging of configuration objects between different Git repositories or between different branches of a single Git repository is required then additional tools such as Git Extensions can be used. |
Use Cases
Single Client - Single
...
Repository
Scenario
- Architecture
- A single JOC Cockpit instance is used with a single Controller or optionally with separate Controllers and Agents for rollout environments such as dev, test, prod.
- The Git repository is used per folder to hold a copy of JS7 configuration objects and to create versions branches of JS7 configuration objects such as dev,, test, prod in a single branchrepository.
- Users
- All users act in the same JOC Cockpit instance that is a single client to the Git server.
- Changes to the Git repository are performed by the users' individual accounts and are added to branches in a single branchdirectory.
- Rollout
- Deployments are performed from a single source (JOC Cockpit) to a number of Controllers and Agents (dev, test, prod).
- The Git repository can be used to fallback (pull) to previous versions of configuration objects, however, only one version is available with JOC Cockpit at a given point in time.
Branches marked as "env" are specific for an environment and are excluded from rollout. Branches marked as "rollout" are forwarded across scheduling environments.
Flowchart |
---|
USER1a [label=" User: 1 ",fillcolor="lightskyblue"] USER1b [label=" User: 2 ",fillcolor="lightskyblue"] USER1c [label=" User: 3 ",fillcolor="lightskyblue"] FOLDER1 [label=" Folder: 1 ",fillcolor="white"] JOC1 [label=" JOC Cockpit ",fillcolor="lightskyblue"] DATABASE [shape="ellipse",label=" Database ",fillcolor="lightskyblue"] REPOGIT [label=" Git RepositoryServer ",fillcolor="orange"] BRANCH1REPO [shape="ellipse",label=" Repository Single Branch ",fillcolor="orange"] BRANCH1R [shape="ellipse",label="Branch: env dev",fillcolor="orangedarkolivegreen1"] JOC1 -> FOLDER1 -> BRANCH1 [label=" Commit/Push\nPull "] # BRANCH1 -> JOC1 [label=" Pull "] BRANCH1 -> REPOBRANCH1I [shape="ellipse",label="Branch: rollout dev",fillcolor="darkolivegreen1"] BRANCH2R [shape="ellipse",label="Branch: env test",fillcolor="darkolivegreen2"] BRANCH2I [shape="ellipse",label="Branch: rollout test",fillcolor="darkolivegreen2"] BRANCH3R [shape="ellipse",label="Branch: env prod",fillcolor="darkolivegreen3"] BRANCH3I [shape="ellipse",label="Branch: rollout prod",fillcolor="darkolivegreen3"] JOC1 -> DATABASEFOLDER1 USER1aJOC1 -> JOC1DATABASE USER1bFOLDER1 -> JOC1 USER1c -> JOC1 |
Repository Operations
- management
- versioning
- rollout
Requirements
- The JOC Cockpit database is the leading system that holds the configuration objects.
Single Client - Multiple Branches (dev, test, prod)
Scenario
BRANCH1R [label="Commit/Push\nPull"]
FOLDER1 -> BRANCH1I [label="Commit/Push\nPull"]
FOLDER1 -> BRANCH2R [label="Commit/Push\nPull"]
FOLDER1 -> BRANCH3R [label="Commit/Push\nPull"]
BRANCH1R -> REPO
BRANCH2R -> REPO
BRANCH3R -> REPO
BRANCH1I -> BRANCH2I -> BRANCH3I -> REPO
REPO -> GIT
USER1a -> JOC1
USER1b -> JOC1
USER1c -> JOC1 |
Repository Operations
- management
- versioning
- rollout
Requirements
- The JOC Cockpit database is the leading system that holds the configuration objects.
Single Client - Multiple Repositories (dev, test, prod)
Scenario
- Architecture
- A dedicated JOC Cockpit instance is used with Controller and Agents for each rollout environment such as dev, test, prod.
- The same Git repository is used per folder by all JOC Cockpit instances, however, each instance is acting on a specific branch per rollout environment.
- The Git repository is used to hold a copy of JS7 configuration objects, to create versions of JS7 configuration objects and to merge branches such as dev => test, test => prod.
- Users
- All users act in the same JOC Cockpit instance of the respective rollout environment that is a single client to the Git server.
- Changes to the Git repository are performed by the users' individual accounts and are added to each branch
- A dedicated JOC Cockpit instance is used with Controller and Agents for each rollout environment such as dev, test, prod.The same Git repository is
- Rollout
- Deployments are performed from a single source (JOC Cockpit) to each Controller and Agents per rollout environment (dev, test, prod) used per folder by all JOC Cockpit instances, however, each instance is acting on a specific branch per rollout environment.
- The Git repository is used to hold a copy of merge branches and to rollout JS7 configuration objects , to create versions of JS7 configuration objects and to merge branches such to different Controllers and Agents, such as dev => test , test => prod.
- Users
- All users act in the same JOC Cockpit instance of the respective rollout environment that is a single client to the Git server.
- Changes to the Git repository are performed by the users' individual accounts and are added to each branch such as dev, test, prod.
- Rollout
- Deployments are performed from a single source (JOC Cockpit) to each Controller and Agents per rollout environment (dev, test, prod).
- The Git repository is used to merge branches and to rollout JS7 configuration objects to different Controllers and Agents, such as dev => test => prod.
- The Git repository can be used to fallback (pull) to previous versions of configuration objects, however, only one version is available with a given JOC Cockpit instance at a given point in time.
- The Git repository can be used to fallback (pull) to previous versions of configuration objects, however, only one version is available with a given JOC Cockpit instance at a given point in time.
Branches marked as "env" are specific for an environment and are excluded from rollout. Branches marked as "rollout" are forwarded across scheduling environments.
Flowchart |
---|
USER1a [label=" User: 1a ",fillcolor="lightskyblue"]
USER1b [label=" User: 1b ",fillcolor="lightskyblue"]
USER2 [label=" User: 2 ",fillcolor="lightskyblue"]
USER3 [label=" User: 3 ",fillcolor="lightskyblue"]
JOC1 [label=" JOC Cockpit: dev ",fillcolor="lightskyblue"]
JOC2 [label=" JOC Cockpit: test ",fillcolor="lightskyblue"]
JOC3 [label=" JOC Cockpit: prod |
Flowchart |
USER1a [label=" User: 1a ",fillcolor="lightskyblue"] USER1b FOLDER1 [label=" User Folder: 1b 1 (dev) ",fillcolor="lightskybluewhite"] USER2FOLDER2 [label=" User Folder: 2 1 (test) ",fillcolor="lightskybluewhite"] USER3FOLDER3 [label=" User Folder: 3 1 (prod) ",fillcolor="lightskybluewhite"] JOC1DATABASE1 [shape="ellipse",label=" JOC Cockpit Database: dev ",fillcolor="lightskyblue"] JOC2DATABASE2 [shape="ellipse",label=" JOC Cockpit Database: test test ",fillcolor="lightskyblue"] JOC3DATABASE3 [shape="ellipse",label=" JOC Cockpit Database: prod prod ",fillcolor="lightskyblue"] FOLDER1GIT [label=" Folder: 1 (dev) Git Server",fillcolor="whiteorange"] FOLDER2REPO1 [label=" FolderRepository: 1 (test) dev",fillcolor="whitedarkolivegreen1"] FOLDER3REPO2 [label=" FolderRepository: 1 (prod) test",fillcolor="whitedarkolivegreen2"] DATABASE1REPO3 [shape="ellipse",label=" DatabaseRepository: dev prod",fillcolor="lightskybluedarkolivegreen3"] DATABASE2BRANCHES1R [shape="ellipse",label=" Database: test Branches: env dev",fillcolor="lightskybluedarkolivegreen1"] DATABASE3BRANCHES1I [shape="ellipse",label=" DatabaseBranches: prodrollout dev",fillcolor="lightskybluedarkolivegreen1"] REPOBRANCHES2R [shape="ellipse",label=" Branches: env Git Repository test",fillcolor="orangedarkolivegreen2"] BRANCH1BRANCHES2I [shape="ellipse",label=" BranchBranches: devrollout test",fillcolor="orangedarkolivegreen2"] BRANCH2BRANCHES3R [shape="ellipse",label=" BranchBranches: testenv prod",fillcolor="orangedarkolivegreen3"] BRANCH3BRANCHES3I [shape="ellipse",label="Branches: rollout prod",fillcolor="darkolivegreen3"] JOC1 Branch: prod ",fillcolor="orange"] JOC1-> DATABASE1 JOC2 -> DATABASE2 JOC3 -> DATABASE3 JOC1 -> FOLDER1 FOLDER1-> BRANCHES1R [label="Commit/Push\nPull"] FOLDER1-> BRANCHES1I [label="Commit/Push\nPull"] BRANCHES1R -> DATABASE1REPO1 JOC2BRANCHES1I -> DATABASE2REPO1 JOC3JOC2 -> DATABASE3FOLDER2 JOC1FOLDER2 -> FOLDER1 BRANCHES2R [label="Commit/Push\nPull"] FOLDER2 -> BRANCH1BRANCHES2I [label=" Commit/Push\nPull "] JOC2"] BRANCHES2R -> REPO2 BRANCHES2I -> REPO2 JOC3 -> FOLDER2FOLDER3 FOLDER3-> BRANCH2BRANCHES3R [label=" Commit/Push\nPull "] JOC3 -> FOLDER3 -> BRANCH3BRANCHES3I [label=" Commit/Push\nPull "] BRANCH1"] BRANCHES3R -> REPO3 BRANCHES3I -> REPO3 BRANCHES1I -> BRANCH2BRANCHES2I [label=" merge checkout/clone"] BRANCH2BRANCHES2I -> BRANCH3BRANCHES3I [label=" merge checkout/clone"] BRANCH1REPO1 -> REPOGIT BRANCH2REPO2 -> REPOGIT BRANCH3REPO3 -> REPOGIT USER1a -> JOC1 USER1b -> JOC1 USER2 -> JOC2 USER3 -> JOC3 |
...
- Architecture
- A dedicated JOC Cockpit instance is used with each Controller and Agents for each user in the dev rollout environment.
- A dedicated JOC Cockpit instance is used with each Controller and Agents for all users in the test and prod rollout environments.
- The same Git repository is used per folder by all JOC Cockpit instances, however, each instance is acting on a specific branch per rollout environment.
- The Git repository is used to hold a copy of JS7 configuration objects, to create versions of JS7 configuration objects and to merge branches such as dev => test, test => prod.
- Users
- Users act in individual JOC Cockpit instances of the dev rollout environment as multiple clients to the Git server.
- Users act in the same JOC Cockpit instance of the test and prod rollout environment as a single client to the Git server.
- Changes to the Git repository are performed by the users' individual accounts to a each branch.
- Rollout
- Deployments are performed from a single source (JOC Cockpit) to the connected Controller and Agents per rollout environment (dev, test, prod).
- The Git repository is used to merge branches and to rollout JS7 configuration objects to different Controllers and Agents, such as dev => test => prod.
- The Git repository can be used to fallback (pull) to previous versions of configuration objects, however, only one version is available with a given JOC Cockpit instance at a given point in time.
Branches marked as "env" are specific for an environment and are excluded from rollout. Branches marked as "rollout" are forwarded across scheduling environments.
Flowchart |
---|
USER1a |
Flowchart |
USER1a [label=" User: 1a ",fillcolor="lightskyblue"] USER1b [label=" User: 1b ",fillcolor="lightskyblue"] # USER1c [label=" User: 1c ",fillcolor="lightskyblue"] USER2a [label=" User: 2a ",fillcolor="lightskyblue"] USER2b [label=" User: 2b 1a ",fillcolor="lightskyblue"] USER3USER1b [label=" User: 3 1b ",fillcolor="lightskyblue"] JOC1aUSER2a [label=" JOC Cockpit: dev 1a ",fillcolor="lightskyblue"] JOC1b [label=" JOC Cockpit: dev 1b User: 2a ",fillcolor="lightskyblue"] # JOC1cUSER2b [label=" JOC Cockpit User: dev 1c 2b ",fillcolor="lightskyblue"] JOC2USER3 [label=" JOC Cockpit User: test 3 ",fillcolor="lightskyblue"] JOC3 JOC1a [label=" JOC Cockpit: proddev 1a ",fillcolor="lightskyblue"] #JOC1b FOLDER1a [label=" Folder JOC Cockpit: 1adev 1b (dev) ",fillcolor="whitelightskyblue"] #JOC2 FOLDER1b [label=" Folder JOC Cockpit: 1b (dev) test ",fillcolor="whitelightskyblue"] #JOC3 FOLDER1c [label=" Folder JOC Cockpit: 1c (dev) prod ",fillcolor="whitelightskyblue"] #DATABASE1a FOLDER2 [[shape="ellipse",label=" Folder: 1 (test) Database: dev 1a ",fillcolor="whitelightskyblue"] # FOLDER3DATABASE1b [shape="ellipse",label=" Folder Database: 1 (prod) dev 1b ",fillcolor="whitelightskyblue"] DATABASE1aDATABASE2 [shape="ellipse",label=" Database: devtest 1a ",fillcolor="lightskyblue"] DATABASE1bDATABASE3 [shape="ellipse",label=" Database: devprod 1b ",fillcolor="lightskyblue"] # DATABASE1c [shape="ellipse",label=" Database: dev 1c GIT [label="Git Server",fillcolor="orange"] REPO1 [label="Repository: dev",fillcolor="darkolivegreen1"] REPO2 [label="Repository: test",fillcolor="darkolivegreen2"] REPO3 [label="Repository: prod",fillcolor="lightskybluedarkolivegreen3"] DATABASE2 BRANCHES1R [shape="ellipse",label=" DatabaseBranches: testenv dev",fillcolor="lightskybluedarkolivegreen1"] DATABASE3 BRANCHES1I [shape="ellipse",label=" DatabaseBranches: prodrollout dev",fillcolor="lightskybluedarkolivegreen1"] REPOBRANCHES2R [shape="ellipse",label=" Branches: env Git Repository test",fillcolor="orangedarkolivegreen2"] BRANCH1BRANCHES2I [shape="ellipse",label=" BranchBranches: devrollout test",fillcolor="orangedarkolivegreen2"] BRANCH2BRANCHES3R [shape="ellipse",label=" BranchBranches: testenv prod",fillcolor="orangedarkolivegreen3"] BRANCH3BRANCHES3I [shape="ellipse",label="Branches: rollout Branch: prod ",fillcolor="orangedarkolivegreen3"] JOC1a -> DATABASE1a JOC1b -> DATABASE1b JOC2 -> DATABASE2 JOC3 -> DATABASE1b # JOC1c -> DATABASE1c JOC2DATABASE3 JOC1a -> BRANCHES1R [label="Commit/Push\nPull"] JOC1a -> BRANCHES1I [label="Commit/Push\nPull"] JOC1b -> DATABASE2 JOC3 -> DATABASE3 JOC1aBRANCHES1R [label="Commit/Push\nPull"] JOC1b -> BRANCH1BRANCHES1I [label=" CommitCommit/Push\nPull nPull"] JOC1bJOC2 -> BRANCH1BRANCHES2R [label=" CommitCommit/Push\nPull nPull"] # JOC1cJOC2 -> BRANCH1BRANCHES2I [label=" CommitCommit/Push\nPull nPull"] JOC2JOC3 -> BRANCH2BRANCHES3R [label=" CommitCommit/Push\nPull nPull"] JOC3 -> BRANCH3BRANCHES3I [label=" CommitCommit/Push\nPull nPull"] BRANCHES1R -> REPO1 BRANCHES1I -> REPO1 BRANCHES2R -> REPO2 BRANCH1BRANCHES2I -> REPO2 BRANCHES3R -> REPO3 BRANCHES3I -> BRANCH2 [label=" merge "] BRANCH2REPO3 BRANCHES1I -> BRANCHES2I [label="checkout/clone"] BRANCHES2I -> BRANCH3BRANCHES3I [label=" merge "] BRANCH1checkout/clone"] REPO1 -> REPOGIT BRANCH2REPO2 -> REPOGIT BRANCH3REPO3 -> REPOGIT USER3 -> JOC3 USER2a -> JOC2 USER2b -> JOC2 USER1a -> JOC1a USER1b -> JOC1b # USER1c -> JOC1c |
Repository Operations
- management
- versioning
- rollout
- force overwrite
...