Как опубликовать в PyPI с помощью Azure-Pipelines и Poetry
Я пытаюсь настроить приложение Python для публикации в PyPI с помощью Azure-конвейеров. Я хочу быть в состоянии использовать Poetry Publish
для достижения этой цели.
Я знаю об аутентификации шпагата и хранении учетных данных в хранилище ключей 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
3 ответа
Да. В веб-интерфейсе 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
Как насчет строительства с
poetry
и публикация с
twine
, поэтому мы можем воспользоваться преимуществами собственного
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
Вы можете использовать переменную $(System.AccessToken):
- 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)