#python #azure-devops #python-poetry
#python #azure-devops #python-поэзия
Вопрос:
Я пытаюсь настроить Azure Devops для публикации в ленте PyPI со стихами.
Я знаю об аутентификации Twine и хранении учетных данных в хранилище ключей Azure. Но есть ли какой-либо более простой метод? Что-то вроде этого:
- script: |
source .venv/bin/activate
poetry build
displayName: Build wheel
- script: |
source .venv/bin/activate
poetry publish -u USER -p PASS
displayName: Publish wheel
Ответ №1:
ДА. В веб-интерфейсе Azure DevOps:
- Создайте новую ленту PyPI (Артефакты> Новая лента> Создать).
- Создайте учетные данные PyPI (подключитесь к ленте> Python> Сгенерируйте учетные данные Python).
- Создайте секретные переменные конвейера с именами
username
иpassword
и значениями с учетными данными PyPI (Конвейеры> Редактировать> Переменные > Новая переменная > Сохранить это значение в секрете > ОК). - Обновите содержимое
azure-pipelines.yml
файла CI следующим образом:
trigger:
- master
pool:
vmImage: ubuntu-latest
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: 3.7
displayName: Install Python
- script: |
python -m pip install -U pip
pip install poetry
poetry install
displayName: Install software
- script: |
poetry run python -m unittest discover tests/ -v
displayName: Test software
- script: |
poetry build
displayName: Package software
- script: |
poetry config repositories.azure https://pkgs.dev.azure.com/{your organization}/_packaging/{your feed}/pypi/upload
poetry config http-basic.azure $(username) $(password)
poetry publish -r azure
exit 0
displayName: Publish software
Комментарии:
1. Означает ли это, что я должен опубликовать свой пароль или личный токен аутентификации в виде обычного текста в my .azure-pipelines.yml? Если нет, я не уверен, что понимаю, что должно быть в строке конфигурации poetry http-basic, которую вы упомянули.
2. @DanYeaw Да, здесь вы вводите свои учетные данные открытым текстом в
azure-pipelines.yml
(вы просили простое решение).3. Да, простота хороша, но нам также нужно что-то, что не будет раскрывать наши учетные данные всем
4. @DanYeaw Я обновил ответ для настройки учетных данных PyPI, не предоставляя их системе контроля версий, используя секретные переменные Azure Pipelines, что является рекомендуемой практикой. Я надеюсь, это поможет.
Ответ №2:
Как насчет сборки с помощью poetry
и публикации с twine
, чтобы мы могли воспользоваться преимуществами собственной версии Azure TwineAuthenticate
:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(python.version)'
displayName: 'Use Python $(python.version)'
- script: |
python -m pip install --upgrade pip
pip install poetry
pip install twine
poetry install --no-dev
displayName: 'Install dependencies'
- script: |
poetry build
displayName: 'Build package'
- task: TwineAuthenticate@1
inputs:
artifactFeed: 'repo-name/feed-name'
- script: |
twine upload -r repo-name --config-file $(PYPIRC_PATH) dist/*.whl
displayName: Upload package to Azure Artifact
Ответ №3:
Возможно, вы захотите использовать $ (System.Доступная переменная:
- task: Bash@3
inputs:
targetType: 'inline'
script: |
poetry config repositories.myazurepypi https://myorg.pkgs.visualstudio.com/123415462134546/_packaging/lcp-tools/pypi/upload/
poetry publish -r myazurepypi -u a -p $(System.AccessToken)
Комментарии:
1. Для тех, кому интересно, имя пользователя не имеет значения при использовании публикации в артефакты с помощью PAT или System. Доступ открыт, но он не может быть пустым.