CI/CD repository structure

When using Continuous Integration or Continuous Deployment, the system serializes database data into XML and stores the results on the file system in a repository folder.

The files are further organized within the following folder structure:

  • Channel level folders – the top level separates objects based on their relationship with channels: @global for global objects, <channel code name> for content and configuration objects related to individual channels (such as pages or emails).

    • Object type folders – the next level contains folders for specific types of objects, based on object type names (see Reference - CI/CD object types to learn more).

      • Object files – individual XML files are named according to the code name of the corresponding object. Object types without code names use the value of a non-unique field, followed by a unique hash. Object types without any easily readable identifying fields use their GUID value for the file name.
      • Binding data files – binding data is not stored in separate files for individual binding records, but combined for each main object in the relationship. The binding XML data contains an identifier of the main object (parent) in the relationship, and then identifiers of all objects that have the given relationship with the main object, along with any other data stored by the binding. The binding files are named after the main object in format: <object name>@<unique hash>
      • Parent object folders – object types that belong under a parent type use an additional level of subfolders – objects are separated into folders named according to the parent object in format: <parent object name>@<unique hash>. For object types that have multiple possible parent types, the folder name also contains a <parent object type>_ prefix.
      • Separated field files – certain types of objects store the values of specific data fields in separate files (placed next to the main XML file). For example, content items with a Content item asset field store the asset’s binary data as a separate file. The separated files use names in format <object name>#<separated field identifier> and have an appropriate extension.
  • Lock files – the repository contains a .lock folder with temporary lock files used during store and restore operations. You can safely delete or ignore this folder in your source control system.

  • Repository configuration file – the repository contains an XML configuration file (repository.config by default), which is used to adjust the behavior or CI/CD operations and exclude object types or individual objects. See Exclude objects from CI/CD.

Long names and forbidden characters

Very long folder and file names automatically replace the middle of the name with .. characters, preceded and followed by a limited number of characters from the start and end of the name. To ensure the uniqueness of the name, an @ symbol followed by a fixed-length hash value is appended.

For example: longpagetypeprefix..pagetypenameend@fe6fd25d3e.xml

If an object name contains characters that are not allowed in file names (for example slashes or backslashes), the given characters are removed and the same unique hash is appended.

Source control ignore rules

Certain source control systems may have ignore rules, such as gitignore, which exclude files or folders used in the CI/CD repository (for example the *.class and *.user file and folder extensions).

Such rules may prevent your environment from working correctly. We recommend that you evaluate ignore rules for the repository location and disable them as required.

Example - Repository structure

Note: The example does not include all object types supported by CI/CD.

App_Data\CIRepository

  • @global

    • cms.channel

      • dancinggoat.xml
      • dancinggoatemails.xml
    • cms.contentlanguage

      • en.xml
    • cms.contenttype

      • dancinggoat.articlepage.xml
      • dancinggoat.cafe.xml
      • dancinggoat.homepage.xml
    • cms.role

      • administrator.xml
      • dancinggoat.digitalchannelmanager.xml
    • contentitemdata.dancinggoat.cafe

      • newyork-xn4wcoi7@f9f4b7d19c
        • 6f1f362b-6b10-4279-a43e-add609bfb952_en@9fe0105a7b.xml
  • DancingGoat

    • cms.contentitem

      • coffeebeveragesexplained-ouq66na8.xml
      • donatewithus-ib1owx14.xml
    • cms.contentitemcommondata

      • coffeebeveragesexplained-ouq66na8@229b3e934c
        • 455ecded-6b64-485c-ad3c-d4b96effa019_en@e80ce4a807
      • donatewithus-ib1owx14@d2b2946b0a
        • 9246d73c-ac38-4318-b31d-d6540369c730_en@35b7656f37
    • cms.contentitemlanguagemetadata

      • coffeebeveragesexplained-ouq66na8@229b3e934c
        • 0a9c1cfb-bc49-4de7..bcb72a271515_en-us@198d133b1e.xml
      • donatewithus-ib1owx14@d2b2946b0a
        • 70e50ccf-53a7-4d1c..f460b1926823_en-us@91887bc8f9.xml
    • cms.webpageitem

      • articles@6cbaf541d4
        • articles_coffee_beverages_explained@57ca1005db.xml
        • articles_donate_with_us@aa902b35ab.xml
      • articles@53f6ddebaf.xml
    • cms.webpageurlpath

      • articles_coffee_beverages_explained@9afb1e62f2
        • articles_coffee-beverages-explained_en@4ea0f3386e.xml
      • articles_donate_with_us@24682d9230
        • articles_donate-with-us_en@c600fb80ee.xml
    • cms.websitechannel

      • dancinggoat@3d35796746
        • 55e3ae4b-3843-46b8-95d5-79611c371d6f.xml
    • contentitemdata.dancinggoat.articlepage

      • coffeebeveragesexplained-ouq66na8@229b3e934c
        • cd602cee-95c2-4e21-90f3-63e1fd7af896_en@08bac1e16a.xml
      • donatewithus-ib1owx14@d2b2946b0a
        • 8309ebb9-f6d2-44fc-a4fe-27c3903b9a81_en@e15397089c.xml
  • DancingGoatEmails

  • repository.config

Storage structure for specific object types

Content items

The system uses multiple object types to store the content and settings of content items. As a result, the resulting CI/CD files use a more complex structure than standard objects.

Content items are global objects serialized under the @global folder. Each item is divided into multiple folders and files:

  • cms.contentitem – stores general system information about the content item.
  • cms.contentitemcommondata – stores metadata about the item such as the current workflow and version statuses. Organized under subfolders matching the parent content item.
  • cms.contentitemlanguagemetadata – metadata for specific language variants of the item. Organized under subfolders matching the parent content item.
  • cms.contentitemreference – references to content items linked from the item’s fields.
  • contentitemdata.<content type code name> – data stored in the fields of the item’s content type. Items with fields of the Content item asset data type also contain the referenced asset binary next to the XML definition.

For example, a "Bolivia Finca Illimani" reusable content item of the DancingGoat.Coffee content type could be, depending on the type’s fields and supported language variants, serialized into the following XML files:

App_Data\CIRepository

  • @global
    • cms.contentitem
      • boliviafincaillimani-c77ome92.xml
    • cms.contentitemcommondata
      • boliviafincaillimani-c77ome92@4af5d5cd12
        • b8f2c34d-9391-4ac4-aa7d-3e1918ae8436_en@288568df8a.xml
    • cms.contentitemlanguagemetadata
      • boliviafincaillimani-c77ome92@4af5d5cd12
        • bc0d5a69-0257-4bbf-9906-b3a6b6d5f867_en@6b1ab2f0c2.xml
    • cms.contentitemreference
      • boliviafincaillima..7d-3e1918ae8436_en@f22af72b2b
    • contentitemdata.dancinggoat.coffee
      • boliviafincaillima..7d-3e1918ae8436_en@f22af72b2b
        • 734cce16-db74-4114-8a71-50cfcd1136e5.xml

Pages

The system uses multiple object types to store the content and settings of pages. As a result, the resulting CI/CD files use a more complex structure than standard objects.

Pages are serialized under a specific website channel. Each page is divided into multiple folders and files:

  • cms.contentitem – stores general system information about the page.
  • cms.contentitemcommondata – stores metadata about the page such as the current workflow and version statuses. Organized under subfolders matching the parent content item for the page.
  • cms.contentitemlanguagemetadata – metadata for specific language variants of the page. Organized under subfolders matching the parent content item for the page.
  • cms.contentitemreference – references to content items linked from the page’s fields. Organized under subfolders matching the parent content item for the page.
  • cms.webpageitem – data about the page’s position in the website channel’s content tree. Organized into subfolders matching the parent-child hierarchy of the page tree.
  • cms.webpageurlpath – stores the URL path data of the page. Organized under subfolders matching the parent content item for the page.
  • contentitemdata.<content type code name> – data stored in the fields of the page’s content type.

For example, a “Coffee Beverages Explained” page with the DancingGoat.ArticlePage content type under the DancingGoat website channel could be, depending on the page’s fields and language variants, serialized into the following XML files:

App_Data\CIRepository

  • DancingGoat

    • cms.contentitem

      • coffeebeveragesexplained-ouq66na8.xml
    • cms.contentitemcommondata

      • coffeebeveragesexplained-ouq66na8@229b3e934c
        • 455ecded-6b64-485c-ad3c-d4b96effa019_en@e80ce4a807.xml
    • cms.contentitemlanguagemetadata

      • coffeebeveragesexplained-ouq66na8@229b3e934c
        • 0a9c1cfb-bc49-4de7-9cd6-bcb72a271515_en@198d133b1e.xml
    • cms.contentitemreference

      • coffeebeveragesexplained-ouq66na8@229b3e934c
        • 96d3df60-fff0-4e3b-b130-87b7ce42a721_en@90457a51cb.xml
    • cms.webpageitem

      • articles@6cbaf541d4
        • articles_coffee_beverages_explained@57ca1005db.xml
    • cms.webpageurlpath

      • articles_coffee_beverages_explained@9afb1e62f2
        • articles_coffee-beverages-explained@4ea0f3386e.xml
    • contentitemdata.dancinggoat.articlepage

      • coffeebeveragesexp..3c-d4b96effa019_en@878c71bd71

        • cd602cee-95c2-4e21-90f3-63e1fd7af896_en@08bac1e16a.xml

Emails

The system uses multiple object types to store the content and settings of emails. As a result, the resulting CI/CD files use a more complex structure than standard objects.

Emails are serialized under a specific email channel. Each page is divided into multiple folders and files:

  • cms.contentitem – stores general system information about the email.
  • cms.contentitemcommondata – stores metadata about the email such as the current workflow and version statuses. Organized under subfolders matching the parent content item for the email.
  • cms.contentitemlanguagemetadata – metadata for specific language variants of the email. Organized under subfolders matching the parent content item for the email.
  • cms.contentitemreference – references to content items linked from the email’s fields. Organized under subfolders matching the parent content item for the email.
  • emaillibrary.emailconfiguration – stores email purpose and other assorted metadata.

For example, a “Dancing Goat Regular” email with the DancingGoat.Email content type under the DancingGoatEmail email channel could be, depending on the type’s fields, serialized into the following XML files:

App_Data\CIRepository

  • DancingGoat

    • cms.contentitem
      • dancinggoatregular-jspvrlaw.xml
    • cms.contentitemcommondata
      • dancinggoatregular-jspvrlaw@c9e8075026
        • 556e64e1-33ad-4745..f8f325852_en_draft@536bc3c16d.xml
    • cms.contentitemlanguagemetadata
      • dancinggoatregular-jspvrlaw@c9e8075026
        • 6f1792c0-399f-49e5-b0c3-5b03e9607d47_en@e6c32b6adf.xml
    • cms.contentitemreference
      • dancinggoatregular..f8f325852_en_draft@3c1dc19108.xml
    • emaillibrary.emailconfiguration
      • dancinggoatregular-jspvrlaw.xml

Forms

The system uses multiple object types to store the definitions and settings of Forms. As a result, the files containing the serialized data of forms use a more complex structure than standard objects.

Each form is serialized into the following global items:

  • cms.formclass
  • cms.form

Note:

  • CI/CD does NOT serialize form data submissions collected from visitors.
  • Global cms.formfeaturedfield items hold the system’s definitions of featured form fields (options displayed in the Featured category when adding fields to forms).

For example, a form with the “UserFeedback” code name would be serialized into the following XML files:

CMS\App_Data\CIRepository

  • @global

    • cms.form
      • userfeedback.xml
    •  cms.formclass
      • bizform.userfeedback.xml
    • cms.formfeaturedfield
      • kentico.featured.businessphone.xml
      • kentico.featured.companyname.xml
      • kentico.featured.consentagreement.xml
      • kentico.featured.email.xml