Definir segredos de ações do GitHub no comando de construção/execução do contêiner Docker
Estou nos estágios iniciais de construção de um pipeline automatizado. Ainda em fase de exploração. No momento, estou lutando para definir as variáveis de ambiente para o contêiner em que executarei meu aplicativo.
A ideia é definir minhas variáveis de ambiente como segredos de ações do GitHub e configurá-las no contêiner quando executo o comando docker container. O contêiner foi construído a partir de um arquivo Docker Composer.
No momento, tenho isso funcionando:
- name: Backend - Build Container (proof of concept)
run: |
BACKEND_CONTAINER_SH_SCRIPT='eval "GITHUB_USER=123 GITHUB_REPO_NAME=321 docker-compose -f ss-build-files/ubuntu-container-build.yml up -d && docker-compose -f ss-build-files/ubuntu-container-build.yml logs";'
echo "${{ secrets.CONFIG_SERVER_SSH_KEY }}" > id_rsa_ssh_key_server_temp.pem;
chmod 600 id_rsa_ssh_key_server_temp.pem;
ssh -v -t -t -i id_rsa_ssh_key_server_temp.pem -o StrictHostKeyChecking=no ubuntu@${{ env.CONFIG_SERVER_IP }} "$BACKEND_CONTAINER_SH_SCRIPT"
rm id_rsa_ssh_key_server_temp.pem;
echo "Status check: jobs completed successfully!";
No entanto, quando tento integrar com os segredos do GitHub, ele retorna um erro no GitHub Runner:
- name: Backend - Build Container (proof of concept)
run: |
BACKEND_CONTAINER_SH_SCRIPT='eval "GITHUB_USER=x${{ secrets.TEST_1 }} GITHUB_REPO_NAME=xx${{ secrets.TEST_2 }} docker-compose -f ss-build-files/ubuntu-container-build.yml up -d && docker-compose -f ss-build-files/ubuntu-container-build.yml logs";'
echo "${{ secrets.CONFIG_SERVER_SSH_KEY }}" > id_rsa_ssh_key_server_temp.pem;
chmod 600 id_rsa_ssh_key_server_temp.pem;
ssh -v -t -t -i id_rsa_ssh_key_server_temp.pem -o StrictHostKeyChecking=no ubuntu@${{ env.CONFIG_SERVER_IP }} "$BACKEND_CONTAINER_SH_SCRIPT"
rm id_rsa_ssh_key_server_temp.pem;
echo "Status check: jobs completed successfully!";
O erro:
debug1: Sending command: eval "GITHUB_USER=x*** GITHUB_REPO_NAME=xx*** docker-compose -f ss-build-files/ubuntu-container-build.yml up -d && docker-compose -f ss-build-files/ubuntu-container-build.yml logs";
bash: line 1: secret1: command not found
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
Connection to 3.90.173.47 closed.
Transferred: sent 2892, received 2676 bytes, in 0.5 seconds
Bytes per second: sent 6131.9, received 5673.9
debug1: Exit status 127
Error: Process completed with exit code 127.
Nota: estou construindo desta forma porque eval "GITHUB_USER=123 GITHUB_REPO_NAME=321 docker-compose -f ss-build-files/ubuntu-container-build.yml up -d && docker-compose -f ss-build-files/ubuntu-container-build.yml logs"
parece ser a única maneira de funcionar considerando o que desejo realizar, que é criar um script de nó que leia todos os segredos (o aplicativo tem muitas variáveis de ambiente) do repositório e irá gerar uma string assim:
TEST_1=${{ secrets.TEST_1 }} TEST_2=${{ secrets.TEST_2 }}
E vou mesclar essa string com o restante do comando do contêiner do Docker.
Alguém tem alguma idéia do motivo pelo qual esse erro está me ocorrendo ou talvez outra idéia de como eu poderia automatizar essa parte sem codificar um arquivo .env no servidor/contêiner?
Deve funcionar sem
eval
.Nisto
bash: line 1: secret1: command not found
podemos ver que por qualquer motivo ele tenta executar o comandosecret1
. Provavelmente é devido aeval
mexer com ele.