Массовая установка секретных ключей GitHub – файл sh

Я нахожусь на начальных этапах создания простого конвейера автоматического развертывания. Одним из шагов, которые я хотел бы реализовать, была бы массовая установка секретов GitHub Actions, поскольку в моем проекте их много. Примечание. Я новичок в DevOps и сценариях Bash.

  • Терминал: я использую git bash;
  • ОС: я использую Windows 10, однако мне бы хотелось, чтобы один и тот же сценарий работал в терминалах Windows и Linux/Unix;

На данный момент у меня есть вот что:

      REPO_OWNER="your-username"
REPO_NAME="your-repo"
GITHUB_TOKEN="your-personal-access-token"

# Function to get the latest public key.
get_public_key() {
  local response
  response=$(curl -s -X GET -H "Authorization: token $GITHUB_TOKEN" -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/actions/secrets/public-key")
  echo "$response" | jq -r '.key,.key_id'
}

# Associative array of secrets and their values.
declare -A secrets
secrets["SECRET1_TEST"]="value1"
secrets["SECRET2_TEST "]="value2"
secrets["SECRET3_TEST "]="value3"

# Get the latest public key
public_key_info=($(get_public_key))
public_key="${public_key_info[0]}"
key_id="${public_key_info[1]}"

for secret in "${!secrets[@]}"; do
  # Get the secret value from the associative array.
  secret_value="${secrets[$secret]}"

  # Encrypt the secret using the public key
  encrypted_value=$(echo -n "$secret_value" | openssl pkeyutl -encrypt -pubin -inkey <(echo "$public_key") | openssl enc -base64 -A)

  # Set the secret using the GitHub API.
  curl -X PUT \
    -H "Authorization: token $GITHUB_TOKEN" \
    -H "Accept: application/vnd.github.v3+json" \
    "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/actions/secrets/$secret" \
    -d "{\"encrypted_value\":\"$encrypted_value\",\"key_id\":\"$key_id\"}"
done

При запуске этого скрипта я получаю следующую ошибку:

      Could not open file or uri for loading public key from /proc/1885/fd/63: No such file or directory
pkeyutl: Error initializing context
{
  "message": "Invalid request.\n\n does not match /^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=|[A-Za-z0-9+\\/]{4})$/.",
  "documentation_url": "https://docs.github.com/rest/actions/secrets#create-or-update-a-repository-secret"        
}

Есть идеи, что может быть не так со сценарием? Или любое другое предложение подхода?

Изменить: Отладка. Я отлаживаю сценарий. Кажется, чтоencrypted_valueпечатается пусто.

0 ответов

Другие вопросы по тегам