This document describes the architecture of the current CI system hosted at http://jenkins.mxnet-ci.amazon-ml.com/

 

State persistence and versioning

Analysis

To preserve the state of the Jenkins Master, the various files in the Jenkins configuration directory at /var/lib/jenkins have to be considered. In general, these files can be categorized as follows:

  • Config: Configuration files
  • Cache: Temporary cache files to improve performance
  • State: Related to the current and past execution
  • Secrets: Special configuration files which have to be handled with pre-caution (aka must not be stored on a versioning system but rather in a secure storage like KMS).

While Config and Secrets are a crucial part of the CI system and thus require detailed backups and versioning, the Cache can be stored in a non-persistent way. It would be desirable to have the State persisted as this allows to have a seamless experience in between deployments. Due to the fact that the State changes very frequently, no explicit versioning is required.

The analysis and categorization of the existing files is as follows:

caches: Cache
fingerprints: State
HOOK.groovy.d: Config
jobs: Config
incubator-mxnet: Config
branches: State
indexing: State
config.xml: Config
state.xml: Config
	... 
logs: State
nodes: Config
plugins: Config
secrets: Secrets
updates: Config
userContent: Config
users: Secret State
workflow-libs: Config
workspace: State

com.cloudbees.jenkins.plugins.bitbucket.endpoints.BitbucketEndpointConfiguration.xml: Config
com.orctom.jenkins.plugin.buildtimestamp.BuildTimestampWrapper.xml: Config
config.xml: Config AND Secret
credentials.xml: Secret
github-plugin-configuration.xml: Config
hudson.model.UpdateCenter.xml: Config
hudson.plugins.ansicolor.AnsiColorBuildWrapper.xml: Config
hudson.plugins.build_timeout.operations.BuildStepOperation.xml: Config
hudson.plugins.emailext.ExtendedEmailPublisher.xml: Config
hudson.plugins.git.GitSCM.xml: Config
hudson.plugins.git.GitTool.xml: Config
hudson.plugins.jira.JiraProjectProperty.xml: Config
hudson.plugins.timestamper.TimestamperConfig.xml: Config
hudson.tasks.Mailer.xml: Config
hudson.tasks.Shell.xml: Config
hudson.triggers.SCMTrigger.xml: Config
identity.key.enc: Secret
javaposse.jobdsl.plugin.GlobalJobDslSecurityConfiguration.xml: Config
jenkins.CLI.xml: Config
jenkins.install.InstallUtil.lastExecVersion: Config
jenkins.install.UpgradeWizard.state: Config
jenkins.metrics.api.MetricsAccessKey.xml: Config
jenkins.model.ArtifactManagerConfiguration.xml: Config
jenkins.model.DownloadSettings.xml: Config
jenkins.model.JenkinsLocationConfiguration.xml: Config
jenkins.security.QueueItemAuthenticatorConfiguration.xml: Config
jenkins.security.UpdateSiteWarningsConfiguration.xml: Config
nodeMonitors.xml: Config
org.jenkinsci.plugins.ghprb.GhprbTrigger.xml: Config and Secret
org.jenkinsci.plugins.pipeline.modeldefinition.config.GlobalConfig.xml: Config
org.jenkinsci.plugins.resourcedisposer.AsyncResourceDisposer.xml: Config
org.jenkinsci.plugins.workflow.flow.FlowExecutionList.xml: State
org.jenkinsci.plugins.workflow.libs.GlobalLibraries.xml: Config
org.jvnet.hudson.plugins.SSHBuildWrapper.xml: Config
queue.xml.bak: State
scriptApproval.xml: Config
secret.key: Secret
secret.key.not-so-secret: Secret

Solution

asdasd

  • No labels