Как опубликовать в ленте Azure Devops PyPI со стихами?

#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:

  1. Создайте новую ленту PyPI (Артефакты> Новая лента> Создать).
  2. Создайте учетные данные PyPI (подключитесь к ленте> Python> Сгенерируйте учетные данные Python).
  3. Создайте секретные переменные конвейера с именами username и password и значениями с учетными данными PyPI (Конвейеры> Редактировать> Переменные > Новая переменная > Сохранить это значение в секрете > ОК).
  4. Обновите содержимое 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. Доступ открыт, но он не может быть пустым.