Automatizando ações de projetos em seu repositório Git
Neste tutorial, você aprenderá como configurar um pipeline para acionar uma atualização no seu projeto quando as alterações de configuração forem mescladas à ramificação principal do seu repositório. Ao concluir este tutorial, você aprenderá a
automatizar tarefas comuns em um projeto, como validar uma configuração, usando os pipelines e cadeias de ferramentas de sua escolha.
Este é um recurso experimental que está disponível para fins de avaliação e teste e pode mudar sem aviso prévio.
Este tutorial se concentra em um caso de uso simples de atualização de uma configuração em um projeto quando as alterações são mescladas na ramificação principal do seu repositório, conforme ilustrado na imagem a seguir:
Como pipelines e cadeias de ferramentas são personalizáveis, os princípios deste tutorial podem ajudar você a automatizar outras ações comuns dentro de um projeto, como validar e implantar alterações de configuração depois que elas são mescladas ao branch principal no seu repositório. Este tutorial usa ações e fluxos de trabalho GitHub para automatizar um pipeline entre o repositório e o projeto. À medida que você conclui o tutorial, adapte cada etapa para corresponder aos pipelines e processos de CI e CD do seu repositório.
Você pode validar e implantar configurações de rascunho somente depois que elas forem mescladas à ramificação no seu repositório que gerencia seus pipelines de CD. Você também deve sincronizar as atualizações do seu repositório no seu projeto
atualizando as configurações antes de poder validar e implantar essas configurações. Você pode automatizar essa atualização usando o método de API project.config.update (conforme descrito
neste tutorial) ou usando o comando CLI ibmcloud project config-update.
Antes de Iniciar
- Certifique-se de que você tenha a função de Editor no serviço IBM Cloud Projects.
- Conclua as etapas para conectar seu projeto a um repositório Git. Para os propósitos deste tutorial, conecte um projeto vazio a um repositório GitHub.
Adicionando segredos e variáveis ao GitHub
Crie segredos e variáveis no repositório GitHub que você conectou ao seu projeto. Esses segredos e variáveis são usados no fluxo de trabalho GitHub. Adicione os seguintes segredos e variáveis:
-
Para autenticar seu projeto, você deve incluir uma chave de API IBM Cloud no seu fluxo de trabalho GitHub. Para manter a chave de API segura, conclua as etapas para criar um segredo para um repositório para salvar a chave de API como um segredo no GitHub. Para os propósitos deste tutorial, nomeie o segredo
IBM_CLOUD_API_KEY. -
Em seguida, conclua as etapas para criar variáveis de configuração para seu repositório GitHub. Salve as seguintes variáveis:
Lista de variáveis para salvar no seu repositório GitHub Nome da Variável Valor Descrição CONFIG_FOLDER_PATHconfigsO caminho para a pasta do repositório que está conectada ao seu projeto. Esta pasta contém os arquivos de configuração do seu projeto. IAM_URLhttps://iam.cloud.ibm.comO URL para Cloud Identity and Access Management. PROJECTS_API_BASE_URLhttps://projects.api.cloud.ibm.comO URL da API do projeto.
Criando um fluxo de trabalho no GitHub
Conclua as etapas para escrever um fluxo de trabalho no repositório GitHub que você conectou ao seu projeto.
Comece com um arquivo de fluxo de trabalho de exemplo que você pode modificar conforme necessário em GitHub.
Você pode personalizar o fluxo de trabalho com qualquer número de trabalhos que precisar. Entretanto, o código a seguir precisa ser incluído para atualizar com sucesso as configurações no seu projeto quando as alterações são mescladas de uma ramificação lateral para a ramificação principal do seu repositório:
-
Adicione
types: [closed]à seçãoondo fluxo de trabalho para acionar o fluxo de trabalho quando uma solicitação de pull para a ramificação principal for fechada:# Controls when the workflow will run on: # Triggers the workflow on push or pull request events but only for the "main" branch # push: # branches: [ "main" ] pull_request: branches: [ "main" ] types: [closed] -
Adicione uma instrução
ifque aciona esse fluxo de trabalho quando as alterações são mescladas na ramificação principal:jobs: update-config: if: github.event.pull_request.merged == true runs-on: ubuntu-latest -
Inclua o seguinte código no fluxo de trabalho para que seu repositório possa se conectar ao seu projeto, onde
IBM_CLOUD_API_KEYé o nome do segredo que você adicionou ao GitHub:IAM_TOKEN=$(curl -X POST "https://iam.cloud.ibm.com/identity/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -H "Accept: application/json" \ -d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=${{ secrets.IBM_CLOUD_API_KEY }}" | jq -r .access_token) -
Inclua o seguinte código para identificar quais configurações foram editadas:
# get files changed in the PR changed_files=$(git diff --name-only HEAD^ HEAD) echo "Changed files: $changed_files" for file in $changed_files; do # find config files that were changed if [[ "${file}" == ${{ vars.CONFIG_FOLDER_PATH }}/* ]] && [ -s "${file}" ]; then echo "Config file updated: ${file}" # extract data from config files PROJECT_ID=$(jq -r '.project_id' $file) CONFIG_ID=$(jq -r '.config_id' $file) DEF=$(jq '.definition' $file) echo "Project ID: ${PROJECT_ID}" echo "Config ID: ${CONFIG_ID}" -
Inclua o seguinte código para atualizar as configurações editadas no seu projeto:
# update config definition RESPONSE=$(curl -X PATCH "${BASE_URL}/v1/projects/${PROJECT_ID}/configs/${CONFIG_ID}" \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --data "{ \"definition\": ${DEF} }")
Exemplo de arquivo de fluxo de trabalho
O seguinte trecho de código pode ser usado como modelo para seu arquivo de fluxo de trabalho:
name: Projects Git Integration Workflow
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
pull_request:
branches: [ "main" ]
types: [closed]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
update-configs:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Update Project Configs
run: |
IAM_TOKEN=$(curl -X POST "${{ vars.IAM_URL }}/identity/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json" \
-d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=${{ secrets.IBM_CLOUD_API_KEY }}" | jq -r .access_token)
BASE_URL=${{ vars.PROJECTS_API_BASE_URL }}
# get files changed in the PR
changed_files=$(git diff --name-only HEAD^ HEAD)
echo "Changed files: $changed_files"
for file in $changed_files; do
# find config files that were changed
if [[ "${file}" == ${{ vars.CONFIG_FOLDER_PATH }}/* ]] && [ -s "${file}" ]; then
echo "Config file updated: ${file}"
# extract data from config files
PROJECT_ID=$(jq -r '.project_id' $file)
CONFIG_ID=$(jq -r '.config_id' $file)
DEF=$(jq '.definition' $file)
echo "Project ID: ${PROJECT_ID}"
echo "Config ID: ${CONFIG_ID}"
# update config definition
RESPONSE=$(curl -X PATCH "${BASE_URL}/v1/projects/${PROJECT_ID}/configs/${CONFIG_ID}" \
--header "Authorization: Bearer ${IAM_TOKEN}" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data "{ \"definition\": ${DEF} }")
echo $RESPONSE
ERR_CODE=$(echo $RESPONSE | jq '.code')
if [ "${ERR_CODE}" != "null" ]; then
exit 1
fi
else
echo "Not a project configuration file: ${file}"
fi
done
Testando o fluxo de trabalho
Agora que seu fluxo de trabalho foi criado no GitHub, certifique-se de que ele seja executado com sucesso adicionando uma configuração ao projeto. Conclua as etapas a seguir:
-
No console IBM Cloud, clique no ícone do menu de navegação
> Projetos e selecione o projeto que está conectado ao seu repositório GitHub.
-
Clique em Criar para adicionar uma configuração ao seu projeto. Certifique-se de selecionar um ramo lateral onde sua configuração será salva.
-
Edite a configuração. Por exemplo, adicione um método de autenticação no painel Configurar.
-
Selecione o branch lateral onde você deseja confirmar suas alterações.
-
Clique em Confirmar.
-
Acesse seu repositório GitHub e abra uma solicitação de pull para mesclar o branch lateral no branch principal do seu repositório.
-
Verifique se seu fluxo de trabalho é executado quando a ramificação lateral é mesclada à principal. Você pode verificar no repositório GitHub e no projeto:
- No repositório GitHub, vá para a aba Ações e selecione o fluxo de trabalho. Verifique se a atualização foi executada com êxito.
- No seu projeto, clique no
Opções Ícone Opções > Editar para a configuração que você adicionou e alterne para a ramificação principal. Verifique se sua atualização foi aplicada. Por exemplo, o método de autenticação que você adicionou anteriormente está incluído no painel Configurar.