Почему у действия нет доступа к секретам?
Я пытаюсь создать рабочий процесс для развертывания пакетов Nuget в репозитории пакетов Github с помощью действий Github.
В этом случае,
- Репозиторий находится внутри организации
- Я владелец этой организации
- У меня есть доступ администратора к репозиторию
- В репозитории перечислены секреты
- Коммит мой
- Коммит - это прямая фиксация в ветке
Но действие НЕ МОЖЕТ получить доступ к секретам
Ниже представлен рабочий процесс, который я пытаюсь выполнить.
name: Build and Publish
on:
push:
branches:
- gh-packages
jobs:
build_and_publish:
env:
ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
name: Publish Packages to NuGet
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@v1
with:
dotnet-version: "3.0.100"
- name: Dump Github Context
env:
CONTEXT: ${{ toJson(github) }}
SECRETS: ${{ toJson(secrets) }}
TOK: ${{ secrets.ACCESS_TOKEN }}
TEST: ${{ secrets.TEST }
run: |
echo $ACCESS_TOKEN
echo $TOK
echo $TEST
echo $GITHUB_TOKEN
echo "$SECRETS"
echo "$CONTEXT"
- name: Setup Config
run: sed "s/ACCESS_TOKEN/$ACCESS_TOKEN/g" .nuget.config > nuget.config
- run: cat nuget.config
- name: Build
run: dotnet build -c Release
- name: Publish
run: chmod +x ./push.sh && ./push.sh
И GITHUB_TOKEN, и пользовательские секреты, такие как ACCESS_TOKEN, не работают.
дополнение 01:
Даже при установке имени переменной среды как GITHUB_TOKEN не работает
name: Build and Publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
...
4 ответа
Эта проблема возникла из-за моего недоразумения: "Секретные значения должны отображаться в журналах, если они переданы в действие".
Я объединяю ответы Бена Виндинга и brian m. carlson, чтобы brian m. carlson.
Секретные значения очищаются в журналах действий. Не ожидайте увидеть фактические значения в журнале действий. Получение очищенного текста означает, что значение было передано действию. вы можете использовать значение, но не можете увидеть его в журналах. Проверьте ответ Бена, чтобы узнать, как можно увидеть значения, даже если это не рекомендуется.
Обновить
Да, это возможно, но это очень плохая практика. При необходимости вы можете использовать следующую команду, которая обходит меры безопасности Github, чтобы предотвратить утечку секретов из журналов.
run: echo MYSECRET | sed -e 's/\(.\)/\1 /g'
# this will print "M Y S E C R E T"
Просто замените MYSECRET
с секретом, который вы пытаетесь напечатать, например $GITHUB_TOKEN
.
Старый ответ
Ознакомьтесь с этим другим ответом, кажется, что это ожидаемое поведение действий Github.
Как видите, я могу получить (и использовать) значение переменных среды, но секреты не раскрываются.
Это потому, что они секреты. Выходные данные Actions явно очищаются от секретов, и они не отображаются.
Содержимое файла по-прежнему содержит секретное содержимое.
Обновлено:
Это обычное соглашение о том, как преобразовать секреты в действия.
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Так я использую это в своих действиях.
Обновление2
Ознакомьтесь с подробными инструкциями о том, как распечатать свои секреты, но настоятельно не рекомендуется.
Если вы хотите записать что-то, чтобы указать, что секрет существует, попробуйте следующее:
auth_token="${{ inputs.auth_token }}"
echo "auth_token length: ${#auth_token}"
The ${#auth_token}
сообщит длину секрета. В журналах вы найдете следующее:
auth_token length: 72
Это позволяет вам узнать, что auth_token существует и как долго он существует, но не снижает безопасность токена.
Прочитав все содержимое документации GitHub, касающейся доступа к вашим секретам , и, наконец, я увидел это, это научило меня многому с точки зрения лучших практик и стандартных вариантов использования секретов.