Arquivo de Configuração de Implantação

O arquivo de configuração de implantação define os artefatos a serem baixados na instância e o local onde os artefatos devem ser copiados. O arquivo de configuração também especifica a sequência de comandos para implantação.

O arquivo de configuração é escrito em YAML. O arquivo pode ser definido em linha ou fornecido como referência de artefato genérico durante a implantação do grupo de instâncias.

Os administradores do DevOps podem usar o arquivo de configuração de implantação para as seguintes ações:

  • Especificar pacotes de aplicativos e seus locais de armazenamento na instância de computação de destino.
  • Especificar as etapas necessárias para implantar um aplicativo.
  • Especificar variáveis de ambiente incorporadas ou definidas pelo usuário necessárias para implantação.

Estrutura do Arquivo de Configuração de Implantação

Veja a seguir a estrutura básica do arquivo de configuração de implantação:

{
version:     
component:   
env: 
    variables:        
timeoutInSeconds:  
files:  
  - source:
    destination:                              
steps:                              
  - stepType: Command 
    name:
    command:
    runAs:
    timeoutInSeconds:
  - stepType: Command 
}

Veja a seguir os parâmetros de configuração de implantação e seus detalhes:

Parâmetro Descrição
version Número da versão do arquivo de especificação. O valor deve ser 1.0.
component Valor do componente. O único valor suportado é deployment.
shell Opcional. Especifica o shell a ser usado no nível global da especificação de implantação. O valor pode ser substituído no nível da 'etapa'. Os valores permitidos são /bin/sh e bash. Se não for especificado, o valor padrão bash será usado.
env: variables

Variáveis de ambiente definidas pelo usuário que estão disponíveis para os executáveis ou o comando bash que são executados como parte da implantação.

Exemplos: key1: static-value, key2: ${PASSED_FROM_PIPELINE}

Também é possível usar variáveis incorporadas. Para evitar conflitos, as variáveis incorporadas são prefixadas com OCI_DEVOPS.

As variáveis incorporadas são:

  • OCI_DEVOPS_PIPELINE_ID
  • OCI_DEVOPS_STAGE_ID
  • OCI_DEVOPS_DEPLOYMENT_ID

env é um parâmetro opcional.

env: vaultVariables Opcional. A chave deve ser compatível com variáveis de ambiente de string e POSIX. O valor deve ser um OCID (Oracle Cloud Identifier) do segredo do vault. O vault e o pipeline de implantação devem ser da mesma tenancy. A tenancy deve ter uma política apropriada para permitir que recursos do pipeline de implantação acessem o segredo.

O escopo dessa variável é a execução do arquivo de especificação de implantação e está disponível para todas as etapas do arquivo. O valor dessas variáveis é recuperado do vault e disponibilizado como variáveis de ambiente para todas as etapas do arquivo de especificação de implantação.

files

Especifica os artefatos definidos no pipeline de implantação que devem ser copiados e o local da instância de computação de destino para o qual copiá-los. Esse parâmetro é opcional.

O usuário configurado, ocarun, por padrão, possui o diretório especificado e deve ter permissões de gravação e execução (chmod u+wrx). Se a pasta de destino não existir, a implantação do DevOps a criará. Para permitir isso, ocarun (ou o usuário configurado) deve ter permissões de gravação e execução para o diretório principal do diretório de destino especificado.

Por exemplo, se você designar o diretório de destino no arquivo de configuração de implantação como /var/services/accountService, será necessário fornecer permissões de gravação e execução ao usuário configurado para /var/services e permissão de execução para /var.

files: source

Especifica o local de origem dos artefatos. A origem pode se referir a um arquivo ou pasta. Se a origem for um arquivo, esse arquivo será copiado para a pasta definida no destino. Se for uma pasta, todo o conteúdo dessa pasta será copiado para o destino. A origem usa caminho relativo, cuja raiz é a pasta raiz de um ou mais artefatos.

Especifique o nome completo do artefato, incluindo a extensão do tipo de arquivo. Por exemplo, se o arquivo na origem for test.sh, o caminho do artefato deverá ser test.sh ou folder-name/test.sh se o arquivo estiver em uma pasta.

Por exemplo, se o artefato geral especificar um único arquivo, run.sh, esse arquivo será baixado para a pasta raiz (/) na origem. Se o artefato geral for um arquivo compactado, por exemplo, app_pkg.zip, a raiz do conteúdo do arquivo compactado será a pasta raiz.

files: destination Especifica a pasta de destino na qual o arquivo ou a pasta de origem deve ser copiado. O OCI DevOps recomenda considerar o destino como um diretório de preparação para o código de produção, pois o conteúdo do diretório de destino é substituído durante cada implantação.

No exemplo de especificação de implantação a seguir, dois diretórios são mencionados. O diretório de destino é /var/ocarun_staging/app1_staging_folder e o diretório de produção é var/ocarun_prod/main_app.

steps Especifica a lista de etapas que são executadas sequencialmente durante a implantação. Cada etapa é executada como outro processo na instância. Todas as variáveis de ambiente incorporadas e definidas pelo usuário especificadas são transmitidas ao processo.
steps: name Nome definido pelo usuário para a etapa.
steps: command

Comando shell ou arquivo executável shell.

Se o parâmetro files for especificado no arquivo de configuração, o caminho do local do arquivo executável será um caminho absoluto, por exemplo, /genericArtifactDemo/start.sh. Se o parâmetro files não for especificado, o caminho relativo será usado para especificar o local do arquivo executável. O caminho relativo se refere à pasta de trabalho da implantação. Os artefatos são baixados e extraídos para a pasta de trabalho atual da implantação.

Há suporte para comandos de linha única e de várias linhas. Todos os comandos especificados em uma etapa são executados na mesma sessão de shell. Com base no valor steps/*/shell, os comandos podem ser shell ou bash. A falha rápida não está ativada. Para que a etapa seja bem-sucedida, a saída do último comando em uma etapa é considerada. Se o último código de saída do comando for 0, a etapa será considerada como bem-sucedida. O comando de várias linhas funciona como um script bash. Se você quiser usar fail-fast para o comando multilinha, especifique o comando multilinha com (para script bash) set -e \n <rest of the commands> para garantir que o script seja encerrado no primeiro comando que falhar.

Por exemplo, se você especificar o comando wrongcommand \n /usr/bin/sudo -n -u root -E /home/opc/scripts/stop.sh \n echo \"Done\" como set -e \n wrongcommand \n /usr/bin/sudo -n -u root -E /home/opc/scripts/stop.sh \n echo \"Done\", o script será encerrado em wrongcommand.

steps: runAs Execute a etapa como usuário especificado. Por padrão, todas as etapas são executadas como usuário ocarun.
steps: timeoutInSeconds Especifica o período de timeout para finalizar uma etapa.
steps: shell Opcional. Especifica o tipo de shell da etapa atual. Se não for especificado, o valor será herdado do parâmetro shell global. Os valores permitidos são /bin/sh e shell.
steps: onFailure Uma lista de etapas que devem ser executadas em caso de falha para saída normal do estágio de implantação. Os comandos na seção onFailure só serão executados se a etapa correspondente falhar e, após a execução, a especificação de implantação for encerrada. O tratamento da falha não afeta o status do estágio de implantação. Se qualquer uma das etapas falhar, o status do estágio de implantação permanecerá com falha.

Veja a seguir um exemplo de arquivo de configuração de implantação:

version: 1.0
component: deployment
runAs: ocarun
env: 
  variables: 
    version: ${appVersion}
  vaultVariables:
    SECRET_ID: "OCID of the secret in the vault"    
files: 
  - source: /
    destination: /var/ocarun_staging/app1_staging_folder
steps: 
  - stepType: Command
    name: Validate Variables
    command: echo "Version = ${version}:  Secret = ${SECRET_ID}"
    timeoutInSeconds: 60
  - stepType: Command
    name: Stop currently-running application
    command: cd /var/ocarun_prod/main_app; ./stop.sh
    timeoutInSeconds: 600
  - stepType: Command
    name: Clean old version of source code in prod directory
    command: echo "Perform suitable cleanup"
    timeoutInSeconds: 600
  - stepType: Command
    name: Copy new version of source code from staging directory to prod directory
    command: cp -R /var/ocarun_staging/app1_staging_folder/main_app /var/ocarun_prod/
    timeoutInSeconds: 600
  - stepType: Command
    name: Install application
    command: cd /var/ocarun_prod/main_app; ./install.sh
    timeoutInSeconds: 600
  - stepType: Command
    name: Run application
    command: cd /var/ocarun_prod/main_app; ./start.sh
    timeoutInSeconds: 600

Exemplo de um arquivo cloud-init para configurar os dois diretórios (preparação e produção):

#cloud-config
users:
  - default
  - name: ocarun
    sudo: ALL=(ALL) NOPASSWD:ALL

# Create two directories, one for staging and one for production.
runcmd:
  - [mkdir, -p, /var/ocarun_staging]
  - [mkdir, -p, /var/ocarun_prod]
  - [chown, ocarun, /var/ocarun_staging]
  - [chown, ocarun, /var/ocarun_prod]

Exemplo para entender várias entradas para origem e destino:

version: 1.0
component: deployment
runAs: root
shell: bash
env:
  variables:
    version: ${appVersion}
  vaultVariables:
    docker_registry_password : <secret-ocid>  
files:
  # This section is to define how the files in the artifact is put on the compute instance.
  # Multiple entires are supported using a separate source destination section for every entry.
  - source: /
    destination: /genericArtifactDemo
  - source: /tmp/file1
    destination: /var/applicationPath/someDir1
  - source: /tmp/file2
    destination: /var/applicationPath/someDir2  
steps:
  # This section is to define the scripts that each step runs on the instance after file copy.
  - stepType: Command
    name: Install Apache Web Server
    command: /genericArtifactDemo/install_dependencies.sh
    runAs: root
    timeoutInSeconds: 600
  - stepType: Command
    name: Stop Web Server
    command: /genericArtifactDemo/stop.sh
    runAs: root
    timeoutInSeconds: 60
  - stepType: Command
    name: Install New Version of Software
    command: /genericArtifactDemo/install.sh
    runAs: root
    timeoutInSeconds: 60
  - stepType: Command
    name: Start Web Server
    command: /genericArtifactDemo/start.sh
    runAs: root
    timeoutInSeconds: 60
  - stepType: Command
    name: stop and install
    command: |
      /scripts/stop.sh
      echo "Done stop.sh.."
      /scripts/install_dependencies.sh
      echo "Done install_dependencies.sh.."
      /scripts/install.sh
      echo "Done install.sh.."
    timeoutInSeconds: 1200
    runAs: root
    shell: /bin/sh
    onFailure:
       - stepType: Command
         command: /scripts/recovery_steps.sh
         name:"OnFailure step"
         timeoutInSeconds: 1200

Executando o Arquivo de Configuração de Implantação

O serviço DevOps usa o agente RunCommand para executar os comandos especificados no arquivo de configuração da instância de computação de destino. Para obter mais informações sobre como ativar o plug-in RunCommand, consulte a seção "Pré-requisitos" em Implantando em um Grupo de Instâncias. Se o arquivo de configuração de implantação contiver placeholders, eles serão substituídos pelos valores definidos na lista de parâmetros da implantação. Consulte Configurando Parâmetros.