Хранить учетные данные для загрузки артефактов шпагатом - PullRequest
0 голосов
/ 23 мая 2019

Я собираю свой пакет Python с помощью конвейера Azure DevOps, и сгенерированный артефакт затем загружается в фид.Все работает нормально, однако мне не нравится тот факт, что у меня есть файл .pypirc, содержащий учетные данные для загрузки, которые хранятся в моем хранилище.

В основном я загружаю артефакт, используя:

- script: 'twine upload -r imglib --config-file .pypirc dist/imglib-*.tar.gz'

Есть ли другой способ сохранить учетные данные, желательно не в файле, который кто-либо может редактировать?Я читал кое-что о хранении учетных данных в хранилище ключей, но не вижу, как изменить конвейер (файл yml) для этого.

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Ответ Shaykis кажется правильным, однако я не могу заменить заполнитель в файле .pypirc с помощью команды bash.Все, что я получаю, это три звездочки, когда я печатаю содержимое .pypirc после замены.Для замены я использую:

- script: 'sed -i "s/__password__/$PYPI_CRED_MAPPED/g" .pypirc'
  displayName: 'Setting PyPI credentials'
  env:
    PYPI_CRED_MAPPED: $(pypi_cred)

Содержимое .pypirs (отображается во время задачи сборки с использованием bash cat .pypirc. Есть ли более простой способ отладки процесса сборки?):

[distutils]
Index-servers =
  pypi
  imglib

[imglib]
Repository = https://pkgs.dev.azure.com/XXX/_packaging/imglib/pypi/upload
username = imglib
password = ***

Кто-нибудь знает, что там происходит?

РЕДАКТИРОВАТЬ 2:

Я также пытался использовать $env:PYPI_CRED_MAPPED, но в этом случае только $env заменяется ничем, и все, что мне осталось, это :PYPI_CRED_MAPPED.Кроме того, я смотрю на документы , и они используют переменную напрямую (например, $PYPI_CRED_MAPPED, см. Внизу страницы).

РЕДАКТИРОВАТЬ 3:

Три звёздочки - просто заполнитель.Он работал с $PYPI_CRED_MAPPED, как указано в EDIT 2 .Процесс сборки не удался по другой причине.Я также попробовал это с командой powershell, предоставленной в ответе, и это работало также.Так что спасибо вам за помощь.

1 Ответ

1 голос
/ 23 мая 2019

Вы можете сохранить переменную как секретную переменную, в файле .pypirc поместите заполнитель и в конвейер добавьте скрипт, который заменит заполнитель переменной.

1) В редакторе .yaml нажмите 3 точки рядом с кнопкой «Сохранить / Выполнить» в правом верхнем углу, а затем нажмите «Переменные».

2) Добавьте новую переменную (пример pythonCred) с паролем и нажмите на значок замка, чтобы сделать его секретным.

3) Перейдите к файлу .pypirc и замените пароль на __password__.

4) Добавьте в свой конвейер задачу PowerShell, чтобы поставить пароль:

- powershell: |
    (Get-Content path/to/pypirc) -replace "__password__" , "$env:CredPython" | Set-Content -Path path/to/pypirc
  env: CredPython: $(pythonCred) # you must to map the variable because is a secret variable

Таким способом вы также можете использовать хранилище ключей Azure, скачать оттуда пароль в задаче хранилища ключей Azure и заменить обновление .pypirc.

...