Eu tenho um Azure KeyVault que contém um segredo, vamos chamá-lo de "test1".
Eu tenho um pipeline de lançamento do Azure DevOps que executa dois scripts bash. Um embutido, o outro baseado em arquivo.
O script embutido não tem argumento de entrada, pois pode manipular a variável (segredo) do Grupo de Variáveis (que é o Azure Key Vault) sem ele.
O script baseado em arquivo tem uma entrada, que no lado do DevOps é $(test1)
.
No caso de script embutido :
echo "1" $test1
echo "2" test1
echo "3" "$test1"
echo "4" $(test1)
echo "5" ${test1}
echo "6" "$(test1)"
echo "7" "${test1}"
No caso de script baseado em arquivo :
test1=$1
echo "1" $test1
echo "2" test1
echo "3" "$test1"
echo "4" $(test1)
echo "5" ${test1}
echo "6" "$(test1)"
echo "7" "${test1}"
Como você pode ver, os dois scripts são idênticos.
Saída do script embutido:
2024-01-26T09:45:29.0382744Z 1
2024-01-26T09:45:29.0384501Z 2 test1
2024-01-26T09:45:29.0385029Z 3
2024-01-26T09:45:29.0385401Z 4 ***
2024-01-26T09:45:29.0385658Z 5
2024-01-26T09:45:29.0385948Z 6 ***
2024-01-26T09:45:29.0386188Z 7
Saída do script baseado em arquivo:
2024-01-26T09:45:28.6888518Z 1 ***
2024-01-26T09:45:28.6890152Z 2 test1
2024-01-26T09:45:28.6890863Z 3 ***
2024-01-26T09:45:28.7077227Z /d/a/r1/a/_secret/echo.sh: line 6: test1: command not found
2024-01-26T09:45:28.7104148Z 4
2024-01-26T09:45:28.7113476Z 5 ***
2024-01-26T09:45:28.7278287Z /d/a/r1/a/_secret/echo.sh: line 8: test1: command not found
2024-01-26T09:45:28.7287815Z 6
2024-01-26T09:45:28.7289441Z 7 ***
Questões:
- Por que a saída é diferente? Um reconhece a variável desta forma, o outro reconhece a variável de outra forma. Qual é a diferença ou o que estou fazendo de errado?
- Existe a possibilidade de usar um script baseado em arquivo sem argumentos de entrada para os segredos, que vêm do Grupo de Variáveis ou do trabalho do agente "Azure Key Vault".
Isso ocorre porque os scripts baseados em arquivo não substituem
$(VARIABLE)
o espaço reservado. Você deve usar variáveis de ambiente:No seu caso, este é um bom exemplo:
Verifique este documento sobre como usar variáveis secretas: Definir variáveis secretas
Para a primeira consulta, isso ocorre porque os scripts baseados em arquivo não substituem o espaço reservado $(VARIABLE), mas podem ler o argumento que você passou:
echo $(args)
. Aqui você usou o mesmo nome test1(argument) para o segredo test1.Para a consulta 2, para usar um script baseado em arquivo sem argumentos de entrada para os segredos, você pode mapear a variável secreta como ambiente.
E produza o ambiente no arquivo bash. Você não pode gerar $TEST1.
A saída:
Além disso, na tarefa valut do Azure Key, você pode escolher a opção abaixo para que a variável secreta possa ser exposta em todas as tarefas do trabalho.
Se você usar grupos de variáveis vinculados à variável chave valut, certifique-se de que o escopo esteja no lançamento ou no estágio correto e não substitua nas tarefas anteriores do trabalho, para que a variável secreta possa ser mapeada para o ambiente.