Артефакториальный сбор проблем - PullRequest
1 голос
/ 16 октября 2019

Я установил Artifactory и Jira Plugin для моей сборки Jenkins. Добавлены обязательные теги, и я вижу, что билд перемещает мои артефакты в Artifactory

Я добавил rtCollectIssues секцию примерно так:

    stage ('Issues Collection') {
        steps {
            rtCollectIssues (
                serverId: "${ENV_ARTIFACTORY_SERVER_ID}",
                config: """{
                    "version": 1,
                    "issues": {
                        "trackerName": "JIRA",
                        "regexp": "(.+-[0-9]+)\\s-\\s(.+)",
                        "keyGroupIndex": 1,
                        "summaryGroupIndex": 2,
                        "trackerUrl": "https://jira.my-company.com",
                        "aggregate": "true",
                        "aggregationStatus": "RELEASED"
                    }
                }""",

                buildName: "${ENV_JOB_NAME}",
                buildNumber: "${ENV_BUILD_NUMBER}"
            )
        }
    }

Однако я до сих пор не вижу проблем в Artifactory в Builds: enter image description here

Тем не менее, он успешно отправил эти данные из Jenkins (на основе этого изображения ниже) enter image description here

Как добавить комментарии GIT, чтобы они собирались и отправлялисьв JFrog Artifactory?

РЕДАКТИРОВАТЬ: Jenkinsfile:

pipeline {
    agent any

    environment {
        ENV_BRANCH_NAME = "${env.BRANCH_NAME}"
        ENV_BUILD_NUMBER = "${env.BUILD_NUMBER}"
        ENV_JOB_NAME = "${env.JOB_NAME.toLowerCase()}"
        ENV_ARTIFACTORY_URL = "artifactorydev.mycompany.com:8081"
        ENV_ARTIFACTORY_SERVER_ID = "art-01.net"
        ENV_ARTIFACTORY_VIRTUAL_REPO = "docker"
        ENV_ARTIFACTORY_RELEASE_REPO = "libs-release-local"
        ENV_GIT_URL = "https://myserver/_git/hello-world"
    }

    stages {
        stage ('Clone') {
            steps {
                echo 'Branch Name: ' + "${ENV_BRANCH_NAME}"
                echo 'Build Number: ' + "${ENV_BUILD_NUMBER}"
                echo 'Job Name: ' + "${ENV_JOB_NAME}"
                echo 'Artifactory Url: ' + "http://${ENV_ARTIFACTORY_URL}/artifactory"
                echo 'Artifactory ServerId: ' + "${ENV_ARTIFACTORY_SERVER_ID}"

                git(
                   url: "${ENV_GIT_URL}",
                   credentialsId: '4c81efa2-1d49-4b70-859e-d699c1f618c0',
                   branch: 'master'
                )
            }
        }

        stage ('Artifactory configuration') {
            steps {
                rtServer (
                    id: "${ENV_ARTIFACTORY_SERVER_ID}",
                    url: "http://${ENV_ARTIFACTORY_URL}/artifactory",
                    credentialsId: 'f8f8918e-0368-4b37-88ed-cf25401fa1e1',
                    bypassProxy: true
                )
            }
        }

        stage('Build Docker Image') {
            steps {
                echo 'Starting to build docker image'

                script {
                    def dockerfile = 'Dockerfile'
                    def customImage = docker.build('$ENV_ARTIFACTORY_URL/$ENV_ARTIFACTORY_VIRTUAL_REPO/$ENV_JOB_NAME:$ENV_BUILD_NUMBER', "-f ${dockerfile} .")

                }
            }
        }

        stage ('Push To Artifactory') {
            steps {
                rtDockerPush(
                    serverId: "${ENV_ARTIFACTORY_SERVER_ID}",
                    image: "$ENV_ARTIFACTORY_URL/$ENV_ARTIFACTORY_VIRTUAL_REPO/$ENV_JOB_NAME:$ENV_BUILD_NUMBER",
                    host: 'tcp://localhost:2375',
                    targetRepo: "$ENV_ARTIFACTORY_VIRTUAL_REPO",
                    // Attach custom properties to the published artifacts:
                    properties: 'status=stable'
                )
            }
        }

        stage ('Issues Collection') {
            steps {
                rtCollectIssues (
                    serverId: "${ENV_ARTIFACTORY_SERVER_ID}",
                    config: """{
                        "version": 1,
                        "issues": {
                            "trackerName": "JIRA",
                            "regexp": "(.+-[0-9]+)\\s-\\s(.+)",
                            "keyGroupIndex": 1,
                            "summaryGroupIndex": 2,
                            "trackerUrl": "https://jira.inwk.com",
                            "aggregate": "true",
                            "aggregationStatus": "RELEASED"
                        }
                    }""",

                    // You may alternatively provide a path to a config file, instead of the config itself, by setting:
                    // configPath: '/path/to/config'
                    buildName: "${ENV_JOB_NAME}",
                    buildNumber: "${ENV_BUILD_NUMBER}"
                )
            }
        }

        stage ('Publish Build Info') {
            steps {
                rtBuildInfo (
                    captureEnv: true,
                    includeEnvPatterns: ['*Env*'],
                    maxBuilds: 2,
                    maxDays: 2,
                    doNotDiscardBuilds: ["3"],
                    deleteBuildArtifacts: true,
                    buildName: "${ENV_JOB_NAME}",
                    buildNumber: "${ENV_BUILD_NUMBER}"
                )

                rtPublishBuildInfo (
                    serverId: "${ENV_ARTIFACTORY_SERVER_ID}",
                    buildName: "${ENV_JOB_NAME}",
                    buildNumber: "${ENV_BUILD_NUMBER}"
                )
            }
        }
    }
}

1 Ответ

1 голос
/ 22 октября 2019

РЕДАКТИРОВАТЬ (После того, как конвейер был добавлен к вопросу):

Шаг rtBuildInfo настраивает экземпляр информации о сборке. Если имя / номер не указано, он конфигурирует информацию о сборке по умолчанию, соответствующую заданию jenkins.

Когда предоставляются пользовательские сведения о сборке, создается новый экземпляр информации о сборке, если соответствующий еще не создан. Поэтому при создании нового экземпляра этот шаг следует использовать перед другим шагом, который будет использовать этот экземпляр.

Следовательно, примером вашего конвейера будет:

pipeline { agent any

environment {
    ENV_BRANCH_NAME = "${env.BRANCH_NAME}"
    ENV_BUILD_NUMBER = "${env.BUILD_NUMBER}"
    ENV_JOB_NAME = "${env.JOB_NAME.toLowerCase()}"
    ENV_ARTIFACTORY_URL = "artifactorydev.mycompany.com:8081"
    ENV_ARTIFACTORY_SERVER_ID = "art-01.net"
    ENV_ARTIFACTORY_VIRTUAL_REPO = "docker"
    ENV_ARTIFACTORY_RELEASE_REPO = "libs-release-local"
    ENV_GIT_URL = "https://myserver/_git/hello-world"
}

stages {
    stage ('Clone') {
        steps {
            echo 'Branch Name: ' + "${ENV_BRANCH_NAME}"
            echo 'Build Number: ' + "${ENV_BUILD_NUMBER}"
            echo 'Job Name: ' + "${ENV_JOB_NAME}"
            echo 'Artifactory Url: ' + "http://${ENV_ARTIFACTORY_URL}/artifactory"
            echo 'Artifactory ServerId: ' + "${ENV_ARTIFACTORY_SERVER_ID}"

            git(
               url: "${ENV_GIT_URL}",
               credentialsId: '4c81efa2-1d49-4b70-859e-d699c1f618c0',
               branch: 'master'
            )
        }
    }

    stage ('Artifactory configuration') {
        steps {
            rtServer (
                id: "${ENV_ARTIFACTORY_SERVER_ID}",
                url: "http://${ENV_ARTIFACTORY_URL}/artifactory",
                credentialsId: 'f8f8918e-0368-4b37-88ed-cf25401fa1e1',
                bypassProxy: true
            )
        }
    }

    stage ('Configure Build Info') {
        steps {
            rtBuildInfo (
                captureEnv: true,
                includeEnvPatterns: ['*Env*'],
                maxBuilds: 2,
                maxDays: 2,
                doNotDiscardBuilds: ["3"],
                deleteBuildArtifacts: true,
                buildName: "${ENV_JOB_NAME}",
                buildNumber: "${ENV_BUILD_NUMBER}"
            )
        }
    }
    stage('Build Docker Image') {
        steps {
            echo 'Starting to build docker image'

            script {
                def dockerfile = 'Dockerfile'
                def customImage = docker.build('$ENV_ARTIFACTORY_URL/$ENV_ARTIFACTORY_VIRTUAL_REPO/$ENV_JOB_NAME:$ENV_BUILD_NUMBER', "-f ${dockerfile} .")

            }
        }
    }


    stage ('Push To Artifactory') {
        steps {
            rtDockerPush(
                serverId: "${ENV_ARTIFACTORY_SERVER_ID}",
                image: "$ENV_ARTIFACTORY_URL/$ENV_ARTIFACTORY_VIRTUAL_REPO/$ENV_JOB_NAME:$ENV_BUILD_NUMBER",
                host: 'tcp://localhost:2375',
                targetRepo: "$ENV_ARTIFACTORY_VIRTUAL_REPO",
                // Attach custom properties to the published artifacts:
                properties: 'status=stable',
                buildName: "${ENV_JOB_NAME}",
                buildNumber: "${ENV_BUILD_NUMBER}"
            )
        }
    }

    stage ('Issues Collection') {
        steps {
            rtCollectIssues (
                serverId: "${ENV_ARTIFACTORY_SERVER_ID}",
                config: """{
                    "version": 1,
                    "issues": {
                        "trackerName": "JIRA",
                        "regexp": "(.+-[0-9]+)\\s-\\s(.+)",
                        "keyGroupIndex": 1,
                        "summaryGroupIndex": 2,
                        "trackerUrl": "https://jira.inwk.com",
                        "aggregate": "true",
                        "aggregationStatus": "RELEASED"
                    }
                }""",

                // You may alternatively provide a path to a config file, instead of the config itself, by setting:
                // configPath: '/path/to/config'
                buildName: "${ENV_JOB_NAME}",
                buildNumber: "${ENV_BUILD_NUMBER}"
            )
        }
    }

    stage ('Publish Build Info') {
        steps {
            rtPublishBuildInfo (
                serverId: "${ENV_ARTIFACTORY_SERVER_ID}",
                buildName: "${ENV_JOB_NAME}",
                buildNumber: "${ENV_BUILD_NUMBER}"
            )
        }
    }
}
}

Обратите внимание, как rtBuildInfo шаг был перенесен на любой шаг, использующий его. Я также добавил поля buildName и buildNumber к шагу rtDockerPush, предполагая, что вы также хотите собрать информацию о сборке для этого шага.

Теперь, когда вы увидите в журнале, что проблемы были добавлены, вы должнытакже смотрите их в Artifactory.

Конец редактирования.


Как добавить комментарии GIT, чтобы они собирались и отправлялись вJFrog Artifactory?

Поле regexp в конфигурации сбора проблем определяет, какие git-сообщения собираются как проблемы. Из документации :

Регулярное выражение, используемое для сопоставления сообщений git commit. Выражение должно включать две группы захвата - для ключа проблемы (ID) и сводки проблемы.

Например, для следующего поля регулярного выражения: 'regexp': '(.+-[0-9]+)\\s-\\s(.+)' Регулярное выражение соответствует сообщениям фиксации, как показано в следующем примере:

HAP-1364 - заменить вкладки пробелами

...