Описание CIXml#

Структура, в которой хранится информацию о связи КЭ с Nexus и Docker Registry.

CIXml не зависит от среды развертывания.

Параметр general.CIXml хранится в линеаризованном формате.

Общий вид CIXml:

<CIs>
    <!-- Zero or more repetitions: -->
    <ci>

        <!-- Номер КЭ, в рамках которого передается доработка. Пример: 00001129 -->
        <number>string</number>

        <!-- GroupId для работы с Nexus. Пример: Nexus_PROD.CI00000001_example -->
        <NexusGroupID>string</NexusGroupID>

        <!-- ArtifactId для работы с Nexus. Пример: Synapse -->
        <nexusSegment>string</nexusSegment>

        <!--Optional:-->
        <!-- ArtifactId для работы с Nexus (Перегружается nexusSegment). Пример: SMDL -->
        <artifactsID>
            <artifactId>string</artifactId>
        </artifactsID>
        
        <!--Optional:-->
        <!-- Имя Dev репозитория Nexus для публикации дистрибутивов. Пример: maven-distr-dev -->
        <nexusDevRepo>string</nexusDevRepo>
        
        <!-- Имя релизного репозитория Nexus для скачивания дистрибутивов. Пример: maven-distr -->
        <nexusReleaseRepo>string</nexusReleaseRepo>

        <!--Optional:-->
        <!-- Ссылка для работы с Nexus. Пример: https://nexus.ru -->
        <nexusUrl>string</nexusUrl>

        <!--Optional:-->
        <!-- Ссылка Nexus для замены на этапе прикрепления ссылки на дистрибутив к Jira задаче. Пример: https://nexus-jira.ru -->
        <nexusJiraUrl>string</nexusJiraUrl>

        <!--Optional:-->
        <!-- ID CredentialsId который будет использоваться для работы с Nexus -->
        <nexusCredentialsId>string</nexusCredentialsId>

        <!--Optional:-->
        <!-- ID CredentialsId который будет использоваться для работы с QGM -->
        <nexusQGCredentialsId>string</nexusQGCredentialsId>
        
        <!-- Ссылка для работы с Docker Registry. Пример registry.ru -->
        <dockerRegistryURL>string</dockerRegistryURL>
        
        <!-- Предпоследний элемент при split по символу "/" в полной ссылке на релизный Registry без HTTP. Пример: для ссылки registry.ru/ci00000001/ci00000002_example получаем ci00000001 -->
        <dockerRegistryCI>string</dockerRegistryCI>

        <!-- Последний элемент при split по символу "/" в полной ссылке на релизный registry без HTTP. Пример: для ссылки registry.ru/ci00000001/ci00000002_example получаем ci00000002_example -->
        <dockerRegistryProject>string</dockerRegistryProject>
        
        <!-- ID CredentialsId который будет использоваться для работы с Docker Registry -->
        <dockerRegistryCred>string</dockerRegistryCred>        

        <dockerRegistryRepo>
            <!-- Имя репозитория в Release Docker Registry. Пример: docker-release -->
            <!-- prefix - Префикс для формирования ссылки на Release Docker Registry. Пример: repo -->
            <releaseRepo prefix="string">string</releaseRepo>
            
            <!--Optional:-->
            <!-- Имя репозитория в Dev Docker Registry. Пример: docker-dev -->
            <devRepo>string</devRepo>

            <!--Optional:-->
            <!-- Ссылка для работы с Dev Docker Registry. Пример: dev-registry.ru -->
            <devDockerRegistryURL>string</devDockerRegistryURL>
            
            <!--Optional:-->
            <!-- Ссылка для работы с Release Docker Registry. Пример: release-registry.ru -->
            <releaseDockerRegistryURL>string</releaseDockerRegistryURL>
        </dockerRegistryRepo>
    </ci>
</CIs>

XSD схема CIXml:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="CIs">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="ci">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="number" type="xs:unsignedInt" />
              <xs:element name="NexusGroupID" type="xs:string" />
              <xs:element name="nexusSegment" type="xs:string" />
              <xs:element name="artifactsId">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="artifactId" type="xs:string" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="nexusDevRepo" type="xs:string" />
              <xs:element name="nexusReleaseRepo" type="xs:string" />
              <xs:element name="nexusUrl">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute name="Division" type="xs:string" use="optional" />
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
              <xs:element name="nexusJiraUrl" type="xs:string" />
              <xs:element name="nexusCredentialsId">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute name="Division" type="xs:string" use="optional" />
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
              <xs:element name="nexusQGCredentialsId" type="xs:string" />
              <xs:element name="dockerRegistryURL" type="xs:string" />
              <xs:element name="dockerRegistryCI" type="xs:string" />
              <xs:element name="dockerRegistryProject" type="xs:string" />
              <xs:element name="dockerRegistryCred">
                <xs:complexType>
                  <xs:simpleContent>
                    <xs:extension base="xs:string">
                      <xs:attribute name="Division" type="xs:string" use="optional" />
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
              <xs:element name="dockerRegistryRepo">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="releaseRepo" type="xs:string" />
                    <xs:element name="devRepo" type="xs:string" />
                    <xs:element name="devDockerRegistryURL" type="xs:string" />
                    <xs:element name="releaseDockerRegistryURL" type="xs:string" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Пример:

<CIs>
  <ci>
    <number>10000017</number>
    <NexusGroupID>nexus_PROD.CI10000017_example</NexusGroupID>
    <nexusSegment>Example</nexusSegment>
    <artifactsId>
        <artifactId>Example1</artifactId>
    </artifactsId>
    <nexusDevRepo>maven-distr-dev</nexusDevRepo>
    <nexusReleaseRepo>maven-distr</nexusReleaseRepo>
    <nexusUrl Division="Dev">https://nexus-dev.ru</nexusUrl>
    <nexusJiraUrl>https://jira.nexus.ru</nexusJiraUrl>
    <nexusCredentialsId Division="Dev">nexus_cred_id</nexusCredentialsId>
    <nexusQGCredentialsId>nexus_qgm_cred_id</nexusQGCredentialsId>
    <dockerRegistryURL>registry.ru</dockerRegistryURL>
    <dockerRegistryCI>ci10000017</dockerRegistryCI>
    <dockerRegistryProject>ci10000018</dockerRegistryProject>
    <dockerRegistryCred Division="Dev">registry_cred_id</dockerRegistryCred>
    <dockerRegistryRepo>
      <releaseRepo>releaseRepo</releaseRepo>
      <devRepo>docker-dev</devRepo>
      <devDockerRegistryURL>docker-dev.example-host.ru</devDockerRegistryURL>
      <releaseDockerRegistryURL>docker-release.example-host.ru</releaseDockerRegistryURL>
    </dockerRegistryRepo>
  </ci>
</CIs>

В CIXml можно задавать параметры конкретной YML конфигурации к которой подключены Jenkins Jobs.

Для этого нужно у параметра задать в XML атрибуте Division равное значению параметра config.Division из конфигурационного файла SMDL, в Segment значение параметра config.Segment из конфигурационного файла SMDL. Можно задавать несколько через запятую.

Пример с параметром nexusCredentialsId, для configPsi.yml:

<CIs>
    <ci>
        <number>10000017</number>
        <NexusGroupID>nexus_PROD.CI10000017_example</NexusGroupID>
        <nexusSegment>Example</nexusSegment>
        <artifactsId>
            <artifactId>Example1</artifactId>
        </artifactsId>
        <nexusDevRepo>maven-distr-dev</nexusDevRepo>
        <nexusReleaseRepo>maven-distr</nexusReleaseRepo>
        <nexusUrl Division="Dev">https://nexus-dev.ru</nexusUrl>
        <nexusJiraUrl>https://jira.nexus.ru</nexusJiraUrl>
        <nexusCredentialsId Division="Psi">PsiCred</nexusCredentialsId>
        <nexusCredentialsId Division="Psi" Segment="Sigma">PsiCred</nexusCredentialsId>
        <dockerRegistryURL>registry.ru</dockerRegistryURL>
        <dockerRegistryCI>ci10000017</dockerRegistryCI>
        <dockerRegistryProject>ci10000018</dockerRegistryProject>
        <dockerRegistryCred Division="Dev">registry_cred_id</dockerRegistryCred>
        <dockerRegistryRepo>
            <releaseRepo>releaseRepo</releaseRepo>
            <devRepo>docker-dev</devRepo>
            <devDockerRegistryURL>docker-dev.example-host.ru</devDockerRegistryURL>
            <releaseDockerRegistryURL>docker-release.example-host.ru</releaseDockerRegistryURL>
        </dockerRegistryRepo>
    </ci>
</CIs>

Пример в линеаризованном формате:

<CIs><ci><number>10000017</number><NexusGroupID>nexus_PROD.CI10000017_example</NexusGroupID><nexusSegment>Example</nexusSegment><artifactsId><artifactId>Example1</artifactId></artifactsId><nexusDevRepo>maven-distr-dev</nexusDevRepo><nexusReleaseRepo>maven-distr</nexusReleaseRepo><nexusUrl Division="Dev">https://nexus-dev.ru</nexusUrl><nexusJiraUrl>https://jira.nexus.ru</nexusJiraUrl><nexusCredentialsId Division="Psi">PsiCred</nexusCredentialsId><nexusCredentialsId Division="Psi" Segment="Sigma">PsiCred</nexusCredentialsId><dockerRegistryURL>registry.ru</dockerRegistryURL><dockerRegistryCI>ci10000017</dockerRegistryCI><dockerRegistryProject>ci10000018</dockerRegistryProject><dockerRegistryCred Division="Dev">registry_cred_id</dockerRegistryCred><dockerRegistryRepo><releaseRepo>releaseRepo</releaseRepo><devRepo>docker-dev</devRepo><devDockerRegistryURL>docker-dev.example-host.ru</devDockerRegistryURL><releaseDockerRegistryURL>docker-release.example-host.ru</releaseDockerRegistryURL></dockerRegistryRepo></ci></CIs>