Jenkins ações de pipeline
Use essas ações em seu Jenkins pipeline para interagir com Configuração de DevOps modelo de dados.
Jenkins piplines com script e declarativas são compatíveis.
- SnDevOpsConfig
Ação combinada para carregar, validar e publicar dados de configuração.
- SnDevOpsConfigUpload
Carregar dados de configuração para Configuração de DevOps Por trabalho do agente.
- SnDevOpsConfigGetSnapshots
Recupere snapshots para um implantável específico ou todos os implantáveis afetados.
- SnDevOpsConfigPublish
Publique um snapshot para a aplicação fornecida e implantável.
- SnDevOpsConfigExport
Exporte um snapshot para uma determinada aplicação e implantável.
- SnDevOpsConfigRegisterPipeline
Vincular um conjunto de mudanças e/ou snapshot a uma execução de pipeline.
- SnDevOpsConfigValidate
Valide os dados de configuração em relação às políticas da sua organização.
- SnDevOpsChange
Crie uma solicitação de mudança com o snapshot associado anexado.
SnDevOpsConfig
Carregue, valide e publique mudanças de dados de configuração em uma etapa.
Esta ação combina ações snDevOpsConfigUpload, snDevOpsConfigGetSnapshots e snDevOpsConfigRegisterPipeline em uma ação, em vez de precisar executar cada ação separadamente.
- Variáveis de entrada
ConfigFile Especifica o arquivo de dados de configuração a ser carregado no componente ou no caminho implantável no modelo de dados. applicationName Especifica a aplicação para onde os dados de configuração serão carregados. target Especifica o destino do modelo de dados para onde os dados de configuração serão carregados (por exemplo, componente , coleção , implantável ). collectionName (Opcional) Nome da coleção para carregar (obrigatório se o destino for coleção). DeployableName (Opcional) Nome do implantável para o qual carregar (obrigatório se o destino for implantável). namePath Especifica o caminho do nome no modelo de dados para onde os dados de configuração serão carregados.
Nota:Ao carregar para uma pasta vars, você deve iniciar o caminho do nome com "vars/" para especificar o caminho da pasta variável.DataFormat Especifica o formato de dados do arquivo de configuração (por exemplo, JSON , YAML , XML etc.) AutoCOMMIT Especifica se os dados de configuração devem ser confirmados após o carregamento (verdadeiro/falso). O valor padrão é verdadeiro. Validar automaticamente Especifica se os dados de configuração devem ser validados durante a confirmação (verdadeiro/falso). O valor padrão é verdadeiro. Publicação automática Especifica se os dados de configuração devem ser publicados após a validação (verdadeiro/falso). O valor padrão é verdadeiro. changesetNumber (Opcional) Especifica o conjunto de mudanças (aberto) ao qual esta atividade de carregamento está associada. Se não for fornecido, um novo conjunto de mudanças será criado.
Nota:Usado somente para vários cenários de carregamento.MarkFailed (Opcional) Falha no pipeline caso a tentativa de validação falhe (devido a um problema de back-end). MostrarResultados (Opcional) Mostre os resultados de validação no Jenkins log do console de trabalho. ContinuoWithLatest (Opcional) Especifica se o snapshot mais recente deve ser retornado por ApplicatioName - DeployableName - ChangesetNumber combinação se nenhum snapshot for gerado (verdadeiro/falso). O valor padrão é falso. - Saída
- Se bem-sucedido, um snapshot ou conjunto de snapshots.
- Em caso de falha, uma mensagem de falha de API/back-end será mostrada.
- Exemplo
- Entrada:
snapshotObj = snDevOpsConfig( applicationName: "PaymentDemo", configFile: "config/application/Collection/Collection2/*.json", target: "collection", collectionName: "release-1.0", namePath: "settings/infrastructure/database", dataFormat: "json", autoCommit: 'true', autoValidate: 'true', autoPublish: 'true', continueWithLatest: 'true', markFailed: 'true', showResults: 'false' ) echo"*************************\n ${snapshotObj}" - Saída
- Entrada:
- Exemplo - coleção
- Nota:Ao carregar para uma coleção, o. CollectionName o argumento é obrigatório.
snDevOpsConfig( applicationName: 'PaymentDemo', target: 'collection', collectionName: 'release-1.0', namePath: 'web-api-v1.0', configFile: 'k8s/helm/*.yml', dataFormat: 'yaml', autoCommit: 'true', autoValidate: 'true', autoPublish: 'true' ) - Exemplo - implantável
- Nota:Ao carregar para um implantável, o. DeployableName o argumento é obrigatório.
snDevOpsConfig( applicationName: 'PaymentDemo', target: 'deployable', deployableName: 'Production', namePath: 'web-api-v1.0', configFile: 'k8s/helm/*.yml', dataFormat: 'yaml', autoCommit: 'true', autoValidate: 'true', autoPublish: 'true' ) - Vários carregamentos em uma confirmação
Para carregar dados de configuração de diferentes locais ou carregar um conjunto de dados para vários destinos (por exemplo, um componente, um implantável) rastreados como uma única confirmação para seu modelo de dados, você pode chamar SnDevOpsConfigUpload ação quantas vezes forem necessárias para o primeiro conjunto de carregamentos e, em seguida, chame o. SnDevOpsConfig ação para o carregamento final.
Aqui está um exemplo.
No primeiro carregamento, crie uma variável e atribua o valor de retorno da etapa a ela para que ela possa ser reutilizada em carregamentos subsequentes.
Carregar 1 - arquivo XML para o componente:$changeset = snDevOpsConfigUpload( applicationName: 'PaymentDemo', target: 'component', namePath: 'paymentService-v1.0', configFile: 'infra/v1/config.xml', dataFormat: 'xml', autoCommit: 'false', autoValidate: 'false', autoPublish: 'false' )Em carregamentos subsequentes (e carregamento final), use a variável como uma entrada.
Carregar 2 - arquivo JSON para a pasta vars do implantável:snDevOpsConfig( applicationName: 'PaymentDemo', target: 'deployable', deployableName: 'Production', namePath: 'vars/dbSettings', configFile: 'infra/prod/dbConfig.json', dataFormat: 'json', changesetNumber: ”${changeset}”, autoCommit: 'false', autoValidate: 'false', autoPublish: 'false', continueWithLatest: 'true' )
- Carregue vários formatos de dados
- Para carregar dados de configuração em diferentes formatos de arquivo, você pode chamar SnDevOpsConfig ação com estas especificações.
- Certifique-se de ConfigFile o argumento está usando um caractere curinga no caminho.
- Não especifique DataFormat argumento.
Aqui está um exemplo.
- Digamos que tenhamos esses arquivos de configuração.
- É assim que carregar os arquivos de configuração usando SnDevOpsConfig .
snDevOpsConfig( applicationName: 'PaymentDemo', target: 'component', namePath: 'paymentService-v1.0', configFile: 'infra/v1/*', autoCommit: 'true', autoValidate: 'true', autoPublish: 'true' )
SnDevOpsConfigUpload
Esta ação carrega um arquivo de configuração para um determinado local em um modelo de dados da aplicação.
Ele deve ser usado de natureza iterativa para que todos os arquivos de configuração sejam carregados no modelo de dados da aplicação durante a execução do pipeline.
- Carregar para:
- Um componente, coleção ou implantável.
- A pasta de variáveis (vars) de um componente, coleção ou implantável.
- Padrão regex para entrada de arquivo de configuração.
- Capacidade de ser chamado várias vezes no mesmo pipeline.
- Variáveis de entrada
ConfigFile Especifica o arquivo de dados de configuração a ser carregado no componente ou no caminho implantável no modelo de dados. applicationName Especifica a aplicação para onde os dados de configuração serão carregados. target Especifica o destino do modelo de dados para onde os dados de configuração serão carregados (por exemplo, componente , coleção , implantável ). collectionName (Opcional) Nome da coleção para carregar (obrigatório se o destino for coleção). DeployableName Nome do implantável para o qual carregar (obrigatório se o destino for implantável). namePath Especifica o caminho do nome no modelo de dados para onde os dados de configuração serão carregados.
Nota:Ao carregar para uma pasta vars, você deve iniciar o caminho do nome com "vars/" para especificar o caminho da pasta variável.DataFormat Especifica o formato de dados do arquivo de configuração (por exemplo, JSON , YAML , XML etc.) ConvertPath (Opcional) Especifica se a estrutura de diretórios dos arquivos de configuração deve ser preservada (em relação ao espaço) e se o diretório deve ser convertido em caminhos no modelo de dados. changesetNumber (Opcional) Especifica o conjunto de mudanças (aberto) ao qual esta atividade de carregamento está associada. Se não for fornecido, um novo conjunto de mudanças será criado.
Nota:Usado somente para vários cenários de carregamento.AutoCOMMIT Especifica se os dados de configuração devem ser confirmados após o carregamento (verdadeiro/falso). O valor padrão é falso. Validar automaticamente Especifica se os dados de configuração devem ser validados durante a confirmação (verdadeiro/falso). O valor padrão é falso. - Variável de saída
changesetNumber (Opcional) Especifica o conjunto de mudanças (aberto) ao qual esta atividade de carregamento está associada.
Se um número de conjunto de mudanças não for fornecido, um novo conjunto de mudanças será criado.
- Exemplo
- Entrada:
Aqui está um exemplo do SnDevOpsConfigUpload ação. Para fins de ilustração, atribuiremos a resposta a uma variável, ChangeSetId , o que pode ser ecoado para o log do console para cenários de depuração.
changeSetId = snDevOpsConfigUpload( applicationName: "PaymentDemo", target: 'component', namePath: "web-api-v1.0", configFile: "k8s/helm/values.yml", dataFormat: "json", autoCommit: 'true', autoValidate: 'true' ) echo "Changeset: $changeSetId created" - Saída:
Além dos dados que estão sendo carregados em nosso modelo de dados em Configuração de DevOps, A saída seria algo assim (usando o plug-in Blue Ocean para visualizar a saída do console).
- Entrada:
- Exemplo - Vários carregamentos (componente)
- Você pode chamar a ação de upload mais de uma vez para carregar dados de configuração em diferentes formatos de arquivo de diferentes locais, mantendo os uploads como parte de um conjunto de mudanças.
- No primeiro carregamento, nomeie a ação para que a variável de saída changesetNumber possa ser reutilizada nos carregamentos subsequentes.Carregamento de arquivo YAML:
$changeset = snDevOpsConfigUpload( applicationName: 'PaymentDemo', target: 'component', namePath: 'wep-api-v1.0', configFile: 'k8s/helm/values.yml', dataFormat: 'yaml', autoCommit: 'false', autoValidate: 'false' ) - Em carregamentos subsequentes, faça referência à variável de saída changesetNumber do primeiro carregamento como uma variável de entrada.Carregamento de 3 arquivos JSON:
snDevOpsConfigUpload( applicationName: 'PaymentDemo', target: 'component', namePath: 'wep-api-v1.0', configFile: 'infra/*.json', dataFormat: 'json', autoCommit: 'false', autoValidate: 'false', changesetNumber: ”${changeset}” ) - Na chamada final, além de fazer referência à variável de saída changesetNumber do primeiro carregamento como uma variável de entrada, defina AUTOCOMMIT e autoValidate como verdadeiro .Carregamento de arquivo INI:
snDevOpsConfigUpload( applicationName: 'PaymentDemo', target: 'component', namePath: 'wep-api-v1.0', configFile: 'featureToggles/set1.ini', dataFormat: 'ini', autoCommit: 'true', autoValidate: 'true', changesetNumber: ”${changeset}” )
- No primeiro carregamento, nomeie a ação para que a variável de saída changesetNumber possa ser reutilizada nos carregamentos subsequentes.
- Exemplo - Vários carregamentos (coleção e variáveis)
- Você pode chamar a ação de upload mais de uma vez para carregar dados de configuração em diferentes formatos de arquivo de diferentes locais, mantendo os uploads como parte de um conjunto de mudanças.
- No primeiro carregamento, crie uma variável (por exemplo, changeset) e atribua o valor de retorno da etapa a ela para que ela possa ser reutilizada em carregamentos subsequentes.Carregamento de arquivo XML:
$changeset = snDevOpsConfigUpload( applicationName: 'PaymentDemo', target: 'collection', collectionName: 'release-v1.0', namePath: 'v1-common-configs', configFile: 'infra/v1/config.xml', dataFormat: 'xml', autoCommit: 'false', autoValidate: 'false' ) - Em carregamentos subsequentes, use a variável como entrada.Carregamento de arquivo JSON:
snDevOpsConfigUpload( applicationName: 'PaymentDemo', target: 'deployable', deployableName: 'Production', namePath: 'vars/dbSettings', configFile: 'infra/prod/dbConfig.json', dataFormat: 'json', autoCommit: 'true', autoValidate: 'true', changesetNumber: ”${changeset}” )
Nota:Para carregar para uma pasta de variáveis, uploadTarget deve ser definido como implantável E os valores corretos devem ser definidos para deployableName e changesetNumber. - No primeiro carregamento, crie uma variável (por exemplo, changeset) e atribua o valor de retorno da etapa a ela para que ela possa ser reutilizada em carregamentos subsequentes.
SnDevOpsConfigGetSnapshots
Esta ação deve ser usada em diferentes cenários:
- Recupere todos os snapshots de todos os implantáveis afetados.
Quando os arquivos de configuração são carregados em um modelo de dados da aplicação, o sistema cria snapshots para todos os implantáveis determinados como afetados pelo carregamento. Acompanhando o fluxo de IC, supondo que a última chamada de carregamento tenha a validação habilitada, a próxima etapa seria iterar a lista de snapshots e garantir que todos tenham sido aprovados na validação.
- Recupere um snapshot específico.
Após o fluxo do CD, um snapshot específico é recuperado para que possa ser publicado e exportado para ser consumido downstream (por exemplo, para provisionar infraestrutura ou aplicação).
- Recupere os snapshots mais recentes para uma implantação de uma aplicação caso um carregamento não gere snapshots.
Um conjunto de dados de configuração está disponível para implantação em um ambiente para uma combinação aplicação-implantável-conjunto de mudanças quando nenhuma mudança de configuração é feita.
- Mostre resultados de validação de política em uma execução de pipeline.
Exiba resultados de validação de política como resultados de teste na página Resultados de testes de compilação do Jenkins, incluindo Conformidade com exceção, ao obter um snapshot.
- Definições de entrada
applicationName Especifica a aplicação para carregar dados de configuração ou da qual exportar dados. DeployableName (Opcional) Especifica o implantável para a aplicação na qual obter os dados de snapshot mais recentes. changesetNumber (Opcional) Especifica o ID do conjunto de mudanças para o conjunto de mudanças de configuração em que o usuário está interessado. IsValidado (Opcional) Especifica se devem retornar somente snapshots aprovados ou passados com exceção (verdadeiro/falso). O valor padrão é verdadeiro. ContinuoWithLatest (Opcional) Especifica se o snapshot mais recente deve ser retornado por ApplicatioName - DeployableName - ChangesetNumber combinação se nenhum snapshot for gerado (verdadeiro/falso). O valor padrão é falso. - Saída
- Se bem-sucedido, um snapshot ou conjunto de snapshots.
- Em caso de falha, uma mensagem de falha de API/back-end será mostrada.
- Exemplo
- Snapshot específico (especificado):
$snapshots = snDevOpsConfigGetSnapshots( applicationName: 'PaymentDemo', deployableName: 'Production', changesetNumber: 'Chset-16', isValidated: 'true', continueWithLatest: 'true' ) - Snapshot validado mais recente (retorna o snapshot mais recente da combinação de aplicação e implantável):
$snapshots = snDevOpsConfigGetSnapshots( applicationName: 'PaymentDemo', deployableName: 'Production', isValidated: 'true' ) - Todos os snapshots do conjunto de mudanças (retorna todos os snapshots da combinação implantável e de aplicação):
$snapshots = snDevOpsConfigGetSnapshots( applicationName: 'PaymentDemo', changesetNumber: 'Chset-16' ) - Mostre resultados de validação de política em uma execução de pipeline.
- Atribua uma variável ao caminho do arquivo que contém os resultados de validação de snapshot gerados durante SnDevOpsConfigGetSnapshots ação.
- Ligue para Ação JUnit para carregar os resultados de validação de snapshot na seção de teste de execução de pipeline.
stage('Validate') { steps { script { changeSetResults = snDevOpsConfigGetSnapshots( … ) if (!changeSetResults) { echo "No snapshots were created" } else { def changeSetResultsObject = readJSON text: changeSetResults changeSetResultsObject.each { snapshotName = it.name snapshotObject = it } // STEP 1 validationResultsPath = "${snapshotName}_${currentBuild.projectName}_${currentBuild.number}.xml" } } } } post { always { // STEP 2 junit testResults: "${validationResultsPath}", skipPublishingChecks: true } }
- Snapshot específico (especificado):
SnDevOpsConfigPublish
Esta ação publica um snapshot para a aplicação fornecida e implantável. A partir daqui, o snapshot pode ser consumido por meio do processo de exportação.
- Definições de entrada
applicationName Especifica a aplicação da qual publicar dados de configuração. DeployableName Especifica o implantável para a aplicação da qual publicar dados de configuração. nomeSnapshot Especifica o nome do snapshot a ser publicado. - Saída
- Se bem-sucedido, verdadeiro.
- Caso contrário, falso.
- Exemplo
snDevOpsConfigPublish( applicationName: 'PaymentDemo', deployableName: 'Production', snapshotName: 'Production-v23.dpl', )
SnDevOpsConfigExport
Esta ação exporta um snapshot para a aplicação fornecida e implantável.
O usuário deve especificar o exportador, os argumentos relevantes do exportador, o formato de exportação (por exemplo, YAML, JSON etc.) e o local de saída dos dados de configuração exportados.
A partir daqui, os dados de configuração podem ser usados diretamente como uma entrada para uma implantação ou ferramenta de provisionamento downstream no pipeline.
- Argumentos de entrada
applicationName Especifica a aplicação da qual exportar dados. DeployableName Especifica a configuração implantável para a aplicação da qual exportar dados. nomeSnapshot (Opcional) Especifica o snapshot do qual exportar dados.
Se um snapshot não for especificado, o snapshot mais recente do implantável será usado.
Nome da exportação Especifica o exportador a ser aplicado ao snapshot (por exemplo, UniqueCDIs ). Exportargs (Opcional) Especifica argumentos a serem usados junto com o exportador. ExportFormat Especifica o formato para exportar os dados do snapshot (por exemplo, INI , YAML , PROPRIEDADES ). nomeArquivo Especifica o arquivo para o qual exportar os dados (presume-se que esteja no espaço).
Se um nome de arquivo não for especificado, uma concatenação do nome da aplicação e do nome implantável (mais a extensão de arquivo) será usada por padrão.
- Saída
- Se bem-sucedido, verdadeiro.
- Caso contrário, falso.
- Exemplo
snDevOpsConfigExport( applicationName: 'PaymentDemo', deployableName: 'Production', snapshotName: 'Production-v23.dpl', exporterFormat: 'yaml', exporterName: 'returnAllData-now', exporterArgs: '', fileName: 'exported_file-Production-20220302.yml' )
SnDevOpsConfigRegisterPipeline
Esta ação vincula um conjunto de mudanças e/ou snapshot ao pipeline para que ele possa ser rastreado durante a execução do pipeline. Em Velocidade de mudança para DevOps, Isso é mostrado na IU do Pipeline.
Consulte Acelerar seu DevOps processo de mudança para obter mais informações sobre DevOps Recurso de aceleração de mudança.
- Argumentos de entrada
applicationName Especifica o nome da aplicação. changesetNumber (Opcional) Especifica o conjunto de mudanças a ser associado à execução do pipeline.
Nota:Especifique changesetNumber ou snapshotName, mas não ambos.nomeSnapshot (Opcional) Especifica o nome do snapshot a ser associado à execução do pipeline.
Nota:Especifique changesetNumber ou snapshotName, mas não ambos.- Saída
- Se bem-sucedido, verdadeiro.
- Caso contrário, falso.
- Exemplo
- Entrada:
Aqui está um exemplo do SnDevOpsConfigRegisterPipeline ação. Para fins de ilustração, atribuiremos a resposta a uma variável, ChangeSetRegResult , o que pode ser ecoado para o log do console para cenários de depuração.
changeSetRegResult = snDevOpsConfigRegisterPipeline( applicationName: "PaymentDemo", changesetNumber: "Chset-122" ) echo "Pipeline registration result: ${changeSetRegResult}" - Saída:
Além dos dados que estão sendo carregados em nosso modelo de dados em Configuração de DevOps, A saída seria algo assim (usando o plug-in Blue Ocean para visualizar a saída do console).
- Entrada:
SnDevOpsConfigValidate
Valide os dados de configuração em relação às políticas da sua organização.
- Argumentos de entrada
applicationName Aplicação a ser validada. DeployableName Implantável para que a aplicação valide. nomeSnapshot (Opcional) Nome do snapshot a ser validado. MarkFailed (Opcional) Falha no pipeline caso a tentativa de validação falhe (devido a um problema de back-end). MostrarResultados (Opcional) Mostre os resultados de validação no Jenkins log do console de trabalho. - Saída
- Se bem-sucedido, nenhuma saída.
- Em caso de falha, uma mensagem de falha de API/back-end será mostrada.
- Exemplo
- Snapshot específico (especificado):
snDevOpsConfigValidate( applicationName: 'PaymentDemo', deployableName: 'Production', snapshotName: 'Production-v23.dpl', ) - Snapshot mais recente (recupera e valida o snapshot mais recente para a combinação de aplicação e implantável):
$changeset = snDevOpsConfigValidate( applicationName: 'PaymentDemo', deployableName: 'Production' )
- Snapshot específico (especificado):
SnDevOpsChange
Crie uma solicitação de mudança e anexe um snapshot para referência.
Consulte Acelerar seu DevOps processo de mudança para obter mais informações sobre DevOps Recurso de aceleração de mudança.
- Argumentos de entrada
applicationName Especifica o nome da aplicação. nomeSnapshot Especifica o nome do snapshot a ser associado à solicitação de mudança. - Exemplo
snDevOpsChange( applicationName: 'PaymentDemo', snapshotName: 'Production-v23.dpl' )
Exemplo de pipeline do Jenkins
pipeline {
environment {
buildArtifactsPath = "build_artifacts/${currentBuild.number}"
validationResultsPath = ""
}
agent any
stages {
// Initialize pipeline
stage('Initialize') {
steps {
script {
// DevOps Config application related information
appName = 'PaymentDemo'
deployableName = 'Production'
componentName = "web-api-v1.0"
collectionName = "release-1.0"
// Configuration file information
exportFormat = 'yaml'
configFilePath = "k8s/helm/values.yml"
// Exporter related information
exporterName = 'returnAllData-nowPreview'
exporterArgs = ''
// Jenkins variables declared to be used in pipeline
exportFileName = "${buildArtifactsPath}/export_file-${appName}-${deployableName}-${currentBuild.number}.${exportFormat}"
changeSetId = ""
snapshotName = ""
snapshotObject = ""
isSnapshotValidateionRequired = false
isSnapshotPublisingRequired = false
}
}
}
// Validate configuration data changes
stage('Validate') {
parallel {
stage('Config') {
stages('Config Steps') {
// Upload configuration data to DevOps Config
stage('Upload, Validate, & Publish') {
steps {
sh "echo uploading and auto-validating configuration file: ${configFilePath}"
script {
changeSetResults = snDevOpsConfig(
applicationName: "${appName}",
target: 'component',
namePath: "${componentName}",
configFile: "${configFilePath}",
dataFormat: "${configFileFormat}",
autoCommit: 'true',
autoValidate: 'true',
autoPublish: 'true',
isValidated: 'true',
continueWithLatest: 'true',
markFailed: 'true'
)
echo "Snapshots generated, validated, and published: ${changeSetResults}"
def changeSetResultsObject = readJSON text: changeSetResults
changeSetResultsObject.each {
snapshotName = it.name
snapshotObject = it
}
validationResultsPath = "${snapshotName}_${currentBuild.projectName}_${currentBuild.number}*.xml"
}
}
}
// Export published snapshot to be used by downstream deployment tools
stage('Export') {
steps {
script {
// create build artifacts dir to store export file
sh "mkdir -p ${buildArtifactsPath}"
exportResponse = snDevOpsConfigExport(
applicationName: "${appName}",
snapshotName: "${snapshotObject.name}",
deployableName: "${deployableName}",
exporterFormat: "${exportFormat}",
fileName: "${exportFileName}",
exporterName: "${exporterName}",
exporterArgs: "${exporterArgs}"
)
}
}
}
}
}
}
}
// Create change request and attach snapshot for reference
stage('Change Management') {
steps {
script {
// Trigger change request
snDevOpsChange(
applicationName: "${appName}",
snapshotName: "${snapshotName}"
)
}
}
}
}
// NOTE: attach snapshot validation results to run (if the snapshot fails validation)
post {
always {
// attach policy validation results
junit testResults: "${validationResultsPath}", skipPublishingChecks: true
}
}
}