Implementar ações personalizadas para pipelines usando a imagem de contêiner genérica do Docker

  • Versão de lançamento: Yokohama
  • Atualizado 30 de jan. de 2025
  • 17 min. de leitura
  • Use as ações personalizadas ServiceNow para coletar dados relacionados à criação de solicitação de mudança, verificação do Sonar, registro de artefato e registro de pacote em seu pipeline com a ajuda da imagem de contêiner genérica Docker.

    Docker Imagem é um pacote de software que pode ser usado para executar uma aplicação. Esta imagem informa como um contêiner deve ser instanciado e quais componentes de software devem ser executados. Docker O contêiner é um ambiente virtual que combina o código da aplicação e todas as dependências necessárias para executar a aplicação. Para obter mais informações sobre o Docker, consulte a documentação do Docker.

    Variáveis de ambiente para GitLab

    Para configurar imagens Docker, as seguintes variáveis ambientais devem estar disponíveis na instância GitLab do projeto.
    • SNOW_TOKEN: ServiceNow número de token. É uma variável mascarada e não será exibida nos trabalhos.
    • SNOW_TOOLID: ServiceNow ID da ferramenta.
    • SNOW_URL: ServiceNow URL da instância.
    Quando você configura um projeto GitLab, as variáveis ambientais são criadas para o projeto e os valores de variáveis configurados mais recentes são considerados. Se você for um cliente de atualização, deverá reconfigurar seus projetos GitLab existentes ou adicionar manualmente as variáveis ambientais em sua instância GitLab. Para obter informações sobre como adicionar variáveis, consulte a documentação do GitLab.

    Ao adicionar a variável SNOW_TOKEN, você pode adquirir o token selecionando o botão Copiar token no registro da ferramenta, localizado na tabela Ferramenta [sn_devops_tool].

    As variáveis de ambiente devem ser atualizadas com os valores disponíveis no pop-up Configurar webhooks manualmente na página de registro da ferramenta. Para obter detalhes sobre como exibir os detalhes da conexão, consulte Configurar webhooks a partir do registro da ferramenta e Configurar webhooks em GitLab manualmente.

    Detalhes da conexão para GitLab

    Variáveis de ambiente para GitHub Actions

    Para configurar imagens Docker, determinadas variáveis ambientais devem estar disponíveis em sua instância GitHub Actions.

    As variáveis de ambiente a seguir devem ser configuradas na instância de Ações do GitHub.
    Nota:
    As variáveis devem ser atualizadas com os valores disponíveis no pop-up Configurar webhooks manualmente na página de registro da ferramenta.
    • SNOW_TOKEN: ServiceNow número de token. É uma variável mascarada e não será exibida nos trabalhos.
    • SNOW_TOOLID: ServiceNow ID da ferramenta.
    • SNOW_URL: ServiceNow URL da instância.
    Nota:
    Para obter informações sobre como adicionar variáveis em GitHub Actions, consulte a documentação do GitHub.
    As seguintes variáveis de ambiente devem ser passadas no pipeline de ações do GitHub:
    Nota:
    Os valores dessas variáveis são recuperados dinamicamente do GitHub e você não precisa configurá-los separadamente.
    • CI_PIPELINE_ID: ID de execução do fluxo de trabalho de um repositório. Uso - CI_PIPELINE_ID: ${{github.run_id }}
    • CI_API_V4_URL: URL do servidor GitHub. Uso - CI_API_V4_URL: ${{ github.server_url }}
    • CI_Job_ID: ID de execução do fluxo de trabalho de um repositório. Uso - CI_PIPELINE_ID: ${{github.run_id }}
    • CI_PROJECT_PATH: nome do fluxo de trabalho. Uso - CI_PROJECT_PATH: ${{ github.repository }}/${{github.workflow}}
    • CI_REPOSITORY_NAME: nome do repositório. Uso - CI_REPOSITORY_NAME: ${{ github.repository }}
    • CI_RUN_ATTEMPT: número de tentativas de fluxo de trabalho. Uso - CI_RUN_ATTEMPT: ${{ github.run_attempt }}
    • CI_PROJECT_TITLE: nome do fluxo de trabalho. Uso - CI_PROJECT_TITLE: ${{ github.repository }}/${{github.workflow}}
    • CI_COMMIT_BRANCH: nome da ramificação na qual o fluxo de trabalho está sendo executado. Uso - CI_COMMIT_BRANCH: ${{ github.ref_name }}
    • CI_WORKFLOW_NAME: nome do fluxo de trabalho. Uso - CI_WORKFLOW_NAME: ${{ github.workflow }}
    Quando você configura um repositório, as variáveis ambientais são criadas para o repositório e os valores de variáveis configurados mais recentes são considerados. Se você for um cliente de atualização, deverá reconfigurar seus repositórios existentes ou adicionar manualmente as variáveis ambientais em sua instância.

    Detalhes da conexão para ações do GitHub

    Variáveis de ambiente para Harness

    Para configurar Docker imagens, determinadas variáveis ambientais devem estar disponíveis em sua instância do Harness.

    As seguintes variáveis ambientais devem ser configuradas em sua instância do Harness.
    Nota:
    As variáveis devem ser atualizadas com os valores disponíveis no pop-up Configurar webhooks manualmente na página de registro da ferramenta.
    • SNOW_TOKEN: ServiceNow número de token. É uma variável mascarada e não será exibida nos trabalhos.
    • SNOW_TOOLID: ServiceNow ID da ferramenta.
    • SNOW_URL: ServiceNow URL da instância.

    As seguintes variáveis de ambiente devem ser passadas no pipeline do Harness:

    • HARNESS_STAGE_NAME: "<+stage.identifier>"

    • HARNESS_PIPELINE_NAME: "<+org.identifier>/<+project.identifier>/<+pipeline.name>"

    Quando você configura um repositório, as variáveis ambientais são criadas para o repositório e os valores de variáveis configurados mais recentes são considerados. Se você for um cliente de atualização, deverá reconfigurar seus repositórios existentes ou adicionar manualmente as variáveis ambientais em sua instância.

    Tela Configurar webhooks manualmente

    ServiceNow Imagem do Docker

    Você deve passar a ServiceNow Docker Image (servicenowdocker/sndevops:5.1.0) no pipeline antes de adicionar ações personalizadas ao pipeline. Você pode clonar o repositório público app-devops-gitlab localizado em https://github.com/ServiceNow/app-devops-gitlabe criar a imagem do Docker executando os seguintes comandos:
    docker build -t servicenowdocker/sndevops:5.1.0
    docker push servicenowdocker/sndevops:5.1.0
    Você pode adicionar a imagem do Docker no início do arquivo .yml. Você não precisa adicioná-lo para cada trabalho separadamente.
    Nota:
    Se você quiser usar várias imagens, adicione-as nos níveis de trabalho.

    Você também pode personalizar o repositório público app-devops-gitlab e criar sua própria imagem do Docker para passar no pipeline.

    ServiceNow Etapa de mudança do DevOps

    Adicione a etapa personalizada ServiceNow DevOps Change no nível do trabalho para criar uma mudança em sua instância da ServiceNow. Por exemplo:
    
    stages:
      - DevOpsChangeApproval
    
    ServiceNow DevOps Change:
      stage: DevOpsChangeApproval
      image: servicenowdocker/sndevops:5.1.0
      script: 
        - sndevopscli create change -p "{\"changeStepDetails\":{\"timeout\":3600,\"interval\":100},\"attributes\":{\"short_description\":\"Software Deployment\",\"description\":\"Software Deployment.\",\"assignment_group\":\"xxxxxxxxx\",\"implementation_plan\":\"Software update is tested and results can be found in Test Summaries Tab.\",\"backout_plan\":\"When software fails in production, the previous software release will be re-deployed.\",\"test_plan\":\"Testing if the software was successfully deployed or not\"}}"
    
    
    Nota:
    Se você estiver usando a etapa de mudança do Docker e a etapa de mudança de instrução manual quando:, certifique-se de adicioná-las em diferentes níveis de trabalho.

    Você deve inserir os valores de entrada para esta ação personalizada como uma cadeia de caracteres no formato JSON.

    • changeStepDetails: [opcional] Contém os detalhes do tempo limite e do intervalo.
    • intervalo: [opcional] O tempo em segundos de espera entre tentativas da API. O valor padrão é 100 segundos.
    • timeout: [opcional] O tempo máximo em segundos de espera até que a ação falhe. O valor padrão é 3600 segundos.
      Nota:
      Quando o valor de tempo limite também estiver disponível aqui na ferramenta, o valor de tempo limite que for anterior será considerado.
    • atributos: [opcional] Os detalhes do atributo da solicitação de mudança devem ser usados ao criar uma mudança em uma instância ServiceNow. A solicitação de mudança é um objeto JSON entre chaves {} que contém pares de chave-valor separados por uma vírgula (,). Um par de chave-valor consiste em uma chave e um valor separados por dois pontos (:). As chaves compatíveis com o par chave-valor são short_description, description, assign_group, execution_plan, backout_plan, test_plan e assim por diante.
    • -ctx: [opcional] Parâmetros de contexto adicionais no formato JSON. Detalhes da variável de ambiente do GitHub que serão usados para criar a solicitação da API DevOps Change. Por exemplo,
      sndevopscli create change -ctx "{\"projectId\": \"123456\", \"attemptNumber\": \"${{ github.run_attempt }}\"}" -p "{\"changeStepDetails\": {\"timeout\":3600,\"interval\":100},\"autoCloseChange\":true,\"attributes\":{\"short_description\":\"G Venkata Automated Software Deployment\",\"description\":\"Automated Software Deployment.\",\"assignment_group\":\"a715cd759f2002002920bde8132e7018\",\"implementation_plan\":\"Software update is tested and results can be found in Test Summaries Tab.\",\"backout_plan\":\"When software fails in production, the previous software release will be re-deployed.\",\"test_plan\":\"Testing if the software was successfully deployed or not\"}}"
    • -w: [opcional] Especifique se o pipeline deve aguardar a criação e a aprovação da mudança. Por padrão, o pipeline aguardará a criação da mudança e sua aprovação.
    Nota:
    O nome da etapa de mudança deve conter a palavra-chave ServiceNow DevOps Change, que é o nome do trabalho.

    ServiceNow Resultados do SonarScan do DevOps

    Adicione a etapa personalizada ServiceNow Resultados do SonarScan do DevOps no nível do trabalho para criar um resumo do Sonar em sua instância da ServiceNow. Por exemplo:
    
    stages:
      - DevOpsSonarStage
    
    ServiceNow DevOps SonarScan Results:
      stage: DevOpsSonarStage
      image: servicenowdocker/sndevops:5.1.0
      script: 
        - sndevopscli create sonar -url 'https://sonarcloud.io' -projectKey 'devsystem2019_TestImportTest'
    
    
    • url: [Obrigatório] Especifica a URL do Sonar.
    • projectKey: [Obrigatório] Especifica a chave do projeto do Sonar.
    Nota:
    O nome da etapa do Sonar deve ser igual ao nome do trabalho, que é ServiceNow DevOps SonarScan Results.
    Limitação
    Ao criar resultados de resumo de qualidade de software, a variável de ambiente CI_MERGE_REQUEST_SOURCE_BRANCH_NAME será usada para pipelines de mesclagem e CI_DEFAULT_BRANCH será usada para pipelines de marcador porque a variável CI_COMMIT_BRANCH não está disponível para pipelines de mesclagem ou de marcador. Para obter mais informações, consulte a documentação do GitLab.

    Registrar artefato

    Adicione a etapa personalizada do artefato no nível do trabalho para registrar um artefato em sua instância da ServiceNow. Por exemplo:
    
    stages:
      - artifact
    
    artifact:
      stage: artifact
      image: servicenowdocker/sndevops:5.1.0
      script: 
        - sndevopscli create artifact -a "[{\"name\":\"Artifact-${CI_JOB_NAME}\",\"repositoryName\":\"Repo\",\"version\":\"1.${CI_JOB_ID}.0\"}]"
     

    Você deve inserir os valores de entrada para esta ação personalizada como uma cadeia de caracteres no formato JSON.

    -a: [Obrigatório] Especifica detalhes do artefato.

    Registrar pacote

    Adicione a etapa personalizada de pacote no nível do trabalho para registrar um pacote em sua instância da ServiceNow. Por exemplo:
    
    stages:
      - package
    
    package:
      stage: package
      image: servicenowdocker/sndevops:5.1.0
      script: 
        - sndevopscli create package -n "Package2" -a "[{\"name\":\"Artifact-${CI_JOB_NAME}\",\"repositoryName\":\"Repo\" ,\"version\":\"1.${CI_JOB_ID}.0\"}]"

    Você deve inserir os valores de entrada para esta ação personalizada como uma cadeia de caracteres no formato JSON.

    -n: [Obrigatório] Especifica o nome do pacote.

    Obter mudança

    Adicione no nível do trabalho para obter changeRequestNumber da instância ServiceNow com os changeDetails fornecidos para identificar a solicitação de mudança.

    Por exemplo:
    
    
    stages:
      - DevOpsGetChange
    
    ServiceNow DevOps Get Change:
      stage: DevOpsGetChange
      image: servicenowdocker/sndevops:5.1.0
      script: 
        - sndevopscli get change -p "{\"buildNumber\":${CHG_JOB_ID},\"stageName\":\"ServiceNow DevOps Change Step\",\"pipelineName\":\"GitlabDockerGetAndUpdateChange\"}"
    
    -p: It stands for changeDetails. The change details to be used for identifying change request in ServiceNow instance. The change details is a JSON object surrounded by curly braces {} containing key-value pair separated by a comma ,. A key-value pair consists of a key and a value separated by a colon :. The keys supported in key-value pair are buildNumber, pipelineName, stageName
    
    buildNumber: [mandatory]
    This specifies ID of the Job where we have created change request.
    
    stageName: [mandatory]
    This specifies the Job name where we have created change request..
    
    pipelineName: [mandatory]
    This specifies the pipeline name.
    
    Outputs:
      sndevopschg.json file created with content: {
        "status": "SUCCESS",
        "changeRequestNumber": "CHGXXXXX"
      }
      
      changeRequestNumber: Change Request Number found for the given change details
      status: To know the status of the Change Request GET.
    

    Atualizar mudança

    Adicione no nível de trabalho para atualizar a mudança na instância ServiceNow para o changeRequestNumber fornecido como entrada junto com changeRequestDetails.

    Por exemplo:
    
    stages:
      - DevOpsUpdateChangeStage
    
    ServiceNow DevOps Update Change:
      stage: DevOpsUpdateChangeStage
      image: servicenowdocker/sndevops:5.1.0
      script: 
        - sndevopscli update change -n 'CHGXXXXXX' -p "{\"short_description\":\"G Venkata12345 Automated Software Deployment\",\"description\":\"Automated Software Deployment.\",\"assignment_group\":\"XXXXX\",\"implementation_plan\":\"Software update is tested and results can be found in Test Summaries Tab.\",\"backout_plan\":\"When software fails in production, the previous software release will be re-deployed.\",\"test_plan\":\"Testing if the software was successfully deployed or not\"}"
    
    -n [Not mandatory if we have sndevopschg.json in our pipeline yml]: It stands for changeRequestNumber. The change request number to identify a unique change request. 
       Precedence of choosing changeRequestNumber: 
         - changeRequestNumber mentioned in the pipeline yml
         - changeRequestNumber stored in sndevopschg.json.
    
    -p : It stands for changeDetails. The change details to be used for Updating the change request information identified by the specified change request number with the key-value pairs. The change details is a JSON object surrounded by curly braces {} containing key-value pair separated by a comma ,. A key-value pair consists of a key and a value separated by a colon :. The keys supported in key-value pair are short_description, state, description, work_notes ..so on
    
    OR
      - sndevopscli update change -p "{\"short_description\":\"Updated Automated Software Deployment\",\"description\":\"Automated Software Deployment.\",\"assignment_group\":\"XXXXXXXXXX\",\"implementation_plan\":\"Software update is tested and results can be found in Test Summaries Tab.\",\"backout_plan\":\"When software fails in production, the previous software release will be re-deployed.\",\"test_plan\":\"Testing if the software was successfully deployed or not\"}"
    
    NOTE: State should be specified at last in case if you are update the state of change request.
    - sndevopscli update change -p "{\"short_description\":\"Updated Automated Software Deployment\",\"description\":\"Automated Software Deployment.\",\"assignment_group\":\"XXXXXXXXXX\",\"implementation_plan\":\"Software update is tested and results can be found in Test Summaries Tab.\",\"backout_plan\":\"When software fails in production, the previous software release will be re-deployed.\",\"test_plan\":\"Testing if the software was successfully deployed or not\","state":"3"}'
    

    Fechar mudança automaticamente

    Incorpore a mudança de fechamento automático na instância ServiceNow. Para obter informações detalhadas sobre o fechamento automático, consulte Configuração de DevOps detalhes da solicitação de mudança no pipeline.

    Por exemplo:
    
    stages:
      - changeapproval
    
    ServiceNow DevOps Change Step:
      stage: changeapproval
      image: servicenowdocker/sndevops:5.1.0
      script: 
         - sndevopscli create change -p "{\"changeStepDetails\":{\"timeout\":3600,\"interval\":100},\"autoCloseChange\":true,\"attributes\":{\"short_description\":\"G Venkata Automated Software Deployment\",\"description\":\"Automated Software Deployment.\",\"assignment_group\":\"xxxxxxxx\",\"implementation_plan\":\"Software update is tested and results can be found in Test Summaries Tab.\",\"backout_plan\":\"When software fails in production, the previous software release will be re-deployed.\",\"test_plan\":\"Testing if the software was successfully deployed or not\"}}"
      
    autoCloseChange: [optional] : Boolean value
    

    Resultados da verificação de segurança

    Adicione a etapa personalizada ServiceNow Resultados da verificação de segurança para DevOps no nível do trabalho para recuperar os resultados da verificação de segurança. Por exemplo:
    stages:
      - DevOpsSecurityScanStageServiceNow 
    
    ServiceNow DevOps Security Scan Results:
      stage: DevOpsSecurityScanStageimage 
      image: servicenowdocker/sndevops:5.1.0
      script: 
          - sndevopscli create securityScan -p "{\"pipelineInfo\":{\"buildNumber\":\"${CI_PIPELINE_ID}\",\"pipelineExecutionUrl\":\"${CI_PIPELINE_URL}\" },\"securityResultAttributes\":{ \"scanner\":\"Veracode\",\"applicationName\":\"PetStoreAPI-Github\",\"buildVersion\":\"\",\"securityToolId\":\"\"}}"
      -p: [mandatory]It the payload of security result attributes. The payload will have attributes as follows:
        buildNumber: CI_PIPELINE_ID (mandatory)pipelineExecutionUrl: CI_PIPELINE_URL (mandatory)scanner: Scanning tool and is required e.g. Checkmarx One.projectName/projectId: Name/Id of your Checkmarx One project and is required. This attribute is applicable only for Checkmarx One.applicationName: Name of your Veracode application and is required. This attribute is applicable only for Veracode.buildVersion": Veracode Scan name / build version and is optional. This attribute is applicable only for Veracode.scanId: Checkmarx One scan id and is optional. This attribute is applicable only for Checkmarx One.securityToolId: Security tool onboarded in ServiceNow (sys_id of the onboarded security tool) and is optional.
     

    Pipelines de amostra

    Amostra de pipeline do GitLab

    
    image: servicenowdocker/sndevops:5.1.0
    stages:
      - pre-build
      - build
      - sonar
      - securityscan
      - changeapproval
      - getchange
      - updatechange
      - deploy
    
    
    Pre-Build:
      stage: pre-build
      script:
        - echo $CI_JOB_NAME
        
    Artifact and Package:
      stage: build
      script:
        - sndevopscli create artifact -a "[{\"name\":\"Artifact-${CI_JOB_NAME}\",\"repositoryName\":\"TestRepo\",\"version\":\"1.${CI_RUNNER_ID}.0\"}]"
        - sndevopscli create package -n "Test_Package" -a "[{\"name\":\"Artifact-${CI_JOB_NAME}\",\"repositoryName\":\"TestRepo\",\"version\":\"1.${CI_RUNNER_ID}.0\"}]"
    
    
    ServiceNow DevOps SonarScan Results:
      stage: sonar
      script:
        - sndevopscli create sonar -url 'https://sonarcloud.io' -projectKey 'xxxxxxx'
    
    
    ServiceNow DevOps Security Scan Results:
      stage: securityscan
      script:
        - sndevopscli create securityScan -p "{\"pipelineInfo\":{\"buildNumber\":\"${CI_JOB_ID}\", \"stageName\":\"ServiceNow DevOps Security Scan Results\",\"taskExecutionUrl\":\"${CI_JOB_URL}\" },\"securityResultAttributes\":{ \"scanner\":\"Veracode\",\"applicationName\":\"PetStoreAPI-Github\",\"buildVersion\":\"\",\"securityToolId\":\"\"}}"
    
    ServiceNow DevOps Change Step:
      stage: changeapproval
      variables:
        CHG_JOB_ID: $CI_JOB_ID
      script: 
         - echo "CHG_JOB_ID=$CHG_JOB_ID" >> generated_job_id.env
         - sndevopscli create change -p "{\"changeStepDetails\":{\"timeout\":3600,\"interval\":100},\"autoCloseChange\":true,\"attributes\":{\"short_description\":\"G Venkata Automated Software Deployment\",\"description\":\"Automated Software Deployment.\",\"assignment_group\":\"a715cd759f2002002920bde8132e7018\",\"implementation_plan\":\"Software update is tested and results can be found in Test Summaries Tab.\",\"backout_plan\":\"When software fails in production, the previous software release will be re-deployed.\",\"test_plan\":\"Testing if the software was successfully deployed or not\"}}"
         - sndevopscli get change #If we are placing get change cli command in the same job where we are creating change then no need to mention the changeDetails.
      artifacts:
        paths:
          - generated_job_id.env
    
    DevOps Get Change:
      stage: getchange
      script:
        - source generated_job_id.env
        - sndevopscli get change -p "{\"buildNumber\":${CHG_JOB_ID},\"stageName\":\"ServiceNow DevOps Change Step\",\"pipelineName\":\"SmrutiTestDemoProject\"}"
      artifacts:
        paths:
          - sndevopschg.json  
      dependencies:
        - ServiceNow DevOps Change Step
    
    DevOps Update Change:
      stage: updatechange
      script:
        #- sndevopscli update change -n 'CHGXXXX' -p "{\"short_description\":\"Automated Software Deployment\",\"description\":\"Automated Software Deployment.\",\"assignment_group\":\"xxxxxxx\",\"implementation_plan\":\"Software update is tested and results can be found in Test Summaries Tab.\",\"backout_plan\":\"When software fails in production, the previous software release will be re-deployed.\",\"test_plan\":\"Testing if the software was successfully deployed or not\"}"
        - sndevopscli update change -p "{\"short_description\":\"Updated Automated Software Deployment\",\"description\":\"Automated Software Deployment.\",\"assignment_group\":\"xxxxxxx\",\"implementation_plan\":\"Software update is tested and results can be found in Test Summaries Tab.\",\"backout_plan\":\"When software fails in production, the previous software release will be re-deployed.\",\"test_plan\":\"Testing if the software was successfully deployed or not\"}"
      dependencies:
        - DevOps Get Change
    
    Deploy Job:
      stage: deploy
      script:
        - echo $CI_JOB_NAME

    Amostra de pipeline de ações do GitHub

    name: GithubAction
    
    on:
      push:
        branches: ["main"]
      pull_request:
        branches: ["main"]
    
    permissions:
      contents: read
    env:
      SNOW_URL: ${{ secrets.SNOW_URL }}
      SNOW_TOKEN: ${{ secrets.SNOW_TOKEN }}
      SNOW_TOOLID: ${{ secrets.SNOW_TOOLID }}
      # These are the optional env variables
      #CI_PIPELINE_ID: ${{ github.run_id }}
      #CI_API_V4_URL: ${{ github.server_url }}
      #CI_JOB_ID: ${{ github.run_id }}
      #CI_PROJECT_PATH: ${{ github.job }}
      #CI_REPOSITORY_NAME: ${{ github.repository }}
      #CI_RUN_ATTEMPT: ${{ github.run_attempt }}
      #CI_PROJECT_TITLE: ${{ github.repository }}/${{github.workflow}}
      #CI_COMMIT_BRANCH: ${{ github.ref_name }}
      #CI_WORKFLOW_NAME: ${{ github.workflow }}
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - name: Set up JDK 17
            run: |
              echo 'hello'
    
      ServiceNowDevOpsChange:
         runs-on: ubuntu-latest
         needs: build
         container:
           image: servicenowdocker/sndevops:5.1.0
         env:
           CI_JOB_NAME: "ServiceNowDevOpsChange"
    
         steps:
           - name: create change
             run: |
               sndevopscli create change -p "{\"changeStepDetails\":{\"timeout\":3600,\"interval\":10},\"autoCloseChange\":true,\"attributes\":{\"short_description\":\"G Venkata Automated Software Deployment\",\"description\":\"Automated Software Deployment.\",\"assignment_group\":\"a715cd759f2002002920bde8132e7018\",\"implementation_plan\":\"Software update is tested and results can be found in Test Summaries Tab.\",\"backout_plan\":\"When software fails in production, the previous software release will be re-deployed.\",\"test_plan\":\"Testing if the software was successfully deployed or not\"}}"
    
      ServiceNowUpdateDevOpsChange:
           runs-on: ubuntu-latest
           needs: ServiceNowDevOpsChange
           container:
             image: servicenowdocker/sndevops:5.1.0
           env:
             CI_JOB_NAME: "ServiceNowDevOpsChange"
      
           steps:
             - name: update change
               run: |
                 sndevopscli update change -p "{\"short_description\":\"Updated Automated Software Deployment\",\"description\":\"Automated Software Deployment.\",\"assignment_group\":\"a715cd759f2002002920bde8132e7018\",\"implementation_plan\":\"Software update is tested and results can be found in Test Summaries Tab.\",\"backout_plan\":\"When software fails in production, the previous software release will be re-deployed.\",\"test_plan\":\"Testing if the software was successfully deployed or not\"}"
    
      ArtifactAndPackage:
          runs-on: ubuntu-latest
          needs: build
          container:
            image: servicenowdocker/sndevops:5.1.0
          env:
            CI_JOB_NAME: "ArtifactAndPackage"
          steps:
            - name: create artifact
              run: |
                 sndevopscli create artifact -a "[{\"name\": \"com:customactiondemo\",\"version\": \"1.${{ github.run_number }}\",\"semanticVersion\": \"1.${{ github.run_number }}.0\",\"repositoryName\": \"${{ github.repository }}\"}]"
                 sndevopscli create package -n "Test_Package" -a "[{\"name\": \"com:customactiondemo\",\"version\": \"1.${{ github.run_number }}\",\"semanticVersion\": \"1.${{ github.run_number }}.0\",\"repositoryName\": \"${{ github.repository }}\"}]"
    
      ServiceNowDevOpsSonarScanResults:
          name: ServiceNowDevOpsSonarScanResults
          needs: ArtifactAndPackage
          runs-on: ubuntu-latest
          container:
            image: servicenowdocker/sndevops:5.1.0
          env:
            CI_JOB_NAME: "ServiceNowDevOpsSonarScanResults"
          steps:
            - name: devops soanr results
              run: |
                sndevopscli create sonar -url 'https://sonarcloud.io' -projectKey 'xxxxxxx'
    
      ServiceNowDevOpsSecurityScan:
          name: ServiceNowDevOpsSecurityScan
          runs-on: ubuntu-latest
          needs: build
          container:
            image: servicenowdocker/sndevops:5.1.0
          steps:
            - name: security scan
              run: |
               sndevopscli create securityScan -p "{ \"pipelineInfo\": {  \"runId\": \"${{ github.run_id }}\",   \"runNumber\": \"${{ github.run_number }}\", \"runAttempt\": \"${{ github.run_attempt }}\",   \"job\": \"ServiceNowDevOpsSecurityScan\",  \"workflow\": \"${{ github.workflow }}\",  \"repository\": \"${{github.repository}}\" }, \"securityResultAttributes\": { \"scanner\": \"Veracode\",    \"applicationName\": \"PetStoreAPI-Github\",\"buildVersion\": \"\",   \"securityToolId\": \"\"}}"
    

    Amostra de pipeline de arnês

    # This is an example pipeline, and your pipeline and container configurations may vary from the setup shown here.
    # Refer to the pipeline stages for Security, Software, and Change configurations. 
    # Using this YAML file directly will not work as it contains several Harness-specific configurations; check the Command section present for container steps.
    pipeline:
      name: Example pipeline
      identifier: Example_pipeline 
      projectIdentifier: Example_project
      orgIdentifier: ExampleOrg
      tags: {}
      stages:
        - stage:
            name: Build
            identifier: Build
            description: ""
            type: Custom
            spec:
              execution:
                steps:
                  - step:
                      type: ShellScript
                      name: ShellScript_1
                      identifier: ShellScript_1
                      spec:
                        shell: Bash
                        executionTarget: {}
                        source:
                          type: Inline
                          spec:
                            script: echo "Building.."
                        environmentVariables: []
                        outputVariables: []
                      timeout: 10m
            tags: {}
        - stage:
            name: ServiceNow DevOps Sonar Scan Results
            identifier: ServiceNow_DevOps_Sonar_Scan_Results
            description: ""
            type: Custom
            spec:
              execution:
                steps:
                  - step:
                      type: Container
                      name: Sonar container
                      identifier: Sonar_container
                      spec:
                        connectorRef: docker_connector # harness docker connector
                        image: servicenowdocker/sndevops:5.1.0
                        command: |-
                          export SNOW_URL="<+variable.SNOW_URL>"
                          export SNOW_TOOLID="<+variable.SNOW_TOOLID>"
                          export SNOW_TOKEN="<+variable.SNOW_TOKEN>"
                          export HARNESS_STAGE_NAME="<+stage.identifier>"
                          export HARNESS_PIPELINE_NAME="<+org.identifier>/<+project.identifier>/<+pipeline.name>"
                          export CI_COMMIT_BRANCH="main"
                          sndevopscli create sonar -url 'https://sonarcloud.io' -projectKey 'SONAR_PROJECT_KEY' -branch "main"
                        shell: Sh
                        infrastructure:
                          type: KubernetesDirect
                          spec:
                            connectorRef: KUBE_CONNECTOR # harness kubernates connector
                            namespace: harness-delegate-ng
                            resources:
                              limits:
                                cpu: "0.5"
                                memory: 500Mi
                            annotations: {}
                            labels: {}
                            containerSecurityContext:
                              capabilities:
                                drop: []
                                add: []
                            nodeSelector: {}
                        reports:
                          type: JUnit
                          spec:
                            paths: []
                        outputVariables: []
                        envVariables: {}
                      timeout: 1h
            tags: {}
        - stage:
            name: ServiceNow DevOps Security Scan Results
            identifier: ServiceNow_DevOps_Security_Scan_Results
            description: ""
            type: Custom
            spec:
              execution:
                steps:
                  - step:
                      type: Container
                      name: security
                      identifier: security
                      spec:
                        connectorRef: docker_connector # harness docker connector
                        image: servicenowdocker/sndevops:5.1.0
                        command: |-
                          export SNOW_URL="<+variable.SNOW_URL>"
                          export SNOW_TOOLID="<+variable.SNOW_TOOLID>"
                          export SNOW_TOKEN="<+variable.SNOW_TOKEN>"
                          sndevopscli create securityScan -p \
                          "{\"pipelineInfo\":{
                              \"buildNumber\":\"<+stage.nodeExecutionId>\",
                              \"taskExecutionUrl\":\"<+pipeline.executionUrl>?stage=<+stage.nodeExecutionId>\", 
                              \"orchestrationPipeline\":\"<+org.identifier>/<+project.identifier>/<+pipeline.name>\" 
                            },
                            \"securityResultAttributes\":{
                               \"scanner\":\"Veracode\",
                               \"applicationName\":\"VeraDemo-10\"
                            }
                          }"
                        shell: Sh
                        infrastructure:
                          type: KubernetesDirect
                          spec:
                            connectorRef: KUBE_CONNECTOR # harness kubernates connector
                            namespace: harness-delegate-ng
                            resources:
                              limits:
                                cpu: "0.5"
                                memory: 500Mi
                            annotations: {}
                            labels: {}
                            containerSecurityContext:
                              capabilities:
                                drop: []
                                add: []
                            nodeSelector: {}
                        reports:
                          type: JUnit
                          spec:
                            paths: []
                        outputVariables: []
                        envVariables: {}
                      timeout: 1h
            tags: {}
        - stage:
            name: Deploy
            identifier: Deploy
            description: ""
            type: Deployment
            spec:
              deploymentType: Kubernetes
              service:
                serviceRef: service
              environment:
                environmentRef: Dev
                deployToAll: false
                infrastructureDefinitions:
                  - identifier: Infra
              execution:
                steps:
                  - step:
                      type: Container
                      name: ServiceNow change
                      identifier: ServiceNow_change
                      spec:
                        connectorRef: docker_connector # harness docker connector
                        image: servicenowdocker/sndevops:5.1.0
                        command: |-
                          # set mandetory variables. These can be set from Environment variable section of Optional configuration as well.
                          export HARNESS_STAGE_NAME="<+stage.identifier>"
                          export SNOW_URL="<+variable.SNOW_URL>"
                          export SNOW_TOOLID="<+variable.SNOW_TOOLID>"
                          export SNOW_TOKEN="<+variable.SNOW_TOKEN>"
                          # "sndevopscli create change" command notifies ServiceNow DevOps to create a change. 
                          # Ensure to update "upstreamStage" accordingly. Example, if you have 3 stages Test, Change and Deploy in your pipeline, then you must update as "upstreamStage": "<+pipeline.stages.Test.nodeExecutionId>". Note that if your change stage is the first stage, you can remove this line.
                          sndevopscli create change -ctx \
                          "{
                              \"pipelineExecutionUrl\":\"<+pipeline.executionUrl>\",
                              \"stageIdentifier\": \"<+stage.identifier>\",
                              \"stageNodeExecutionId\": \"<+stage.nodeExecutionId>\",
                              \"pipelineName\": \"<+pipeline.name>\",
                              \"upstreamStage\": \"<+pipeline.stages.ServiceNow_DevOps_Security_Scan_Results.nodeExecutionId>\"
                          }" -p \
                          "{
                              \"changeStepDetails\":
                              {
                                      \"timeout\":3600,
                                      \"interval\":100
                              },
                              \"autoCloseChange\":true,
                              \"attributes\":{
                                  \"chg_model\":\"adffaa9e4370211072b7f6be5bb8f2ed\",
                                  \"short_description\":\"Software Deployment\",
                                  \"description\":\"Automated Software Deployment.\",
                                  \"implementation_plan\":\"Software update is tested and results can be found in Test Summaries Tab.\",
                                  \"backout_plan\":\"When software fails in production, the previous software release will be re-deployed.\",
                                  \"test_plan\":\"Testing if the software was successfully deployed or not\"
                              }
                          }"
                        shell: Sh
                        infrastructure:
                          type: KubernetesDirect
                          spec:
                            connectorRef: KUBE_CONNECTOR # harness kubernates connector
                            namespace: harness-delegate-ng
                            resources:
                              limits:
                                cpu: "0.5"
                                memory: 500Mi
                            annotations: {}
                            labels: {}
                            containerSecurityContext:
                              capabilities:
                                drop: []
                                add: []
                            nodeSelector: {}
                        reports:
                          type: JUnit
                          spec:
                            paths: []
                        outputVariables: []
                        envVariables: {}
                      timeout: 1h
                  - step:
                      type: ShellScript
                      name: ShellScript_1
                      identifier: ShellScript_1
                      spec:
                        shell: Bash
                        executionTarget: {}
                        source:
                          type: Inline
                          spec:
                            script: echo "Deploying.."
                        environmentVariables: []
                        outputVariables: []
                      timeout: 10m
                rollbackSteps: []
            tags: {}
            failureStrategies:
              - onFailure:
                  errors:
                    - AllErrors
                  action:
                    type: StageRollback
      properties:
        ci:
          codebase:
            connectorRef: CI_CONNECTOR
            repoName: REPO_NAME
            build: <+input>
            sparseCheckout: []
      notificationRules:
        - name: devopsbugbashwp5
          identifier: devopsbugbashwp5
          pipelineEvents:
            - type: AllEvents
          notificationMethod:
            type: Webhook
            spec:
              webhookUrl: https://{instance_url}/api/sn_devops/v2/devops/tool/orchestration?toolId={tool sys id}&projectId={project sys id}&ni.nolog.token={token}
          enabled: true
    Nota:
    Se você quiser adicionar os resultados da verificação do Sonar e os resultados da verificação de segurança na mesma fase, poderá usar nomes de etapa diferentes para ambas as ações personalizadas, atualizando o valor padrão nos campos sonar_step_names e security_step_names na tabela sn_devops_tool_integration_configuration.