Azure Artifacts Python包最佳实践及依赖异常上传排查
Azure DevOps 流水线上传Python包时自动同步公开依赖至私有源问题
问题背景
已通过Azure DevOps流水线完成自研Python包的开发与构建,构建产物可正常上传至Azure DevOps Artifacts源,整体流程基础运行无报错。
异常表现
- 流水线除上传自研包本身外,还会将setup.cfg中声明的依赖包一并存储到Artifacts源中
- 涉及的依赖均为pandas这类通用公开依赖,在私有Artifacts源中存储这类公开依赖的副本不符合最佳实践,需要找到方法禁用该行为
- 异常仅在特定阶段触发:仅生产部署阶段(
Stage_Deploy_PROD)出现该问题,dev-release分支对应的开发部署阶段无此现象 - 实际被存储到Artifacts源的依赖数量远多于setup.cfg中显式声明的8个依赖,包含大量直接依赖的传递依赖
当前配置
流水线YAML配置
trigger: tags: include: - 'v*.*' branches: include: - main - dev-release pool: vmImage: 'ubuntu-latest' stages: - stage: 'Stage_Test' variables: - group: UtilsDev jobs: - job: 'Job_Test' steps: - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)' - script: | python -m pip install --upgrade pip displayName: 'Upgrade PIP' - script: | pip install pytest pytest-azurepipelines displayName: 'Install test dependencies' - script: | pytest displayName: 'Execution of PyTest' - stage: 'Stage_Build' variables: - group: UtilsDev jobs: - job: 'Job_Build' steps: - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)' - script: | python -m pip install --upgrade pip displayName: 'Upgrade PIP' - script: | pip install build wheel displayName: 'Install build dependencies' - script: | python -m build displayName: 'Artifact creation' - publish: '$(System.DefaultWorkingDirectory)' artifact: package - stage: 'Stage_Deploy_DEV' condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/dev-release')) variables: - group: UtilsDev jobs: - deployment: Build_Deploy displayName: Build Deploy environment: [OMIT]-artifacts-dev strategy: runOnce: deploy: steps: - download: current artifact: package - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)' - script: | pip install twine displayName: 'Install build dependencies' - task: TwineAuthenticate@1 displayName: 'Twine authentication' inputs: pythonUploadServiceConnection: 'PythonPackageUploadDEV' - script: | python -m twine upload --skip-existing --verbose -r $(feedName) --config-file $(PYPIRC_PATH) dist/* workingDirectory: '$(Pipeline.Workspace)/package' displayName: 'Artifact upload' - stage: 'Stage_Deploy_PROD' dependsOn: 'Stage_Build' condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))) variables: - group: UtilsProd jobs: - job: 'Approval_PROD_Release' pool: server steps: - task: ManualValidation@0 timeoutInMinutes: 1440 inputs: notifyUsers: | [USER]@[OMIT].com instructions: 'Please validate the build configuration and resume' onTimeout: 'resume' - deployment: Build_Deploy displayName: Build Deploy environment: [OMIT]-artifacts-prod strategy: runOnce: deploy: steps: - download: current artifact: package - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)' - script: | pip install twine displayName: 'Install build dependencies' - task: TwineAuthenticate@1 displayName: 'Twine authentication' inputs: pythonUploadServiceConnection: 'PythonPackageUploadPROD' - script: | python -m twine upload --skip-existing --verbose -r $(feedName) --config-file $(PYPIRC_PATH) dist/* workingDirectory: '$(Pipeline.Workspace)/package' displayName: 'Artifact upload'
setup.cfg配置
[metadata] name = [OMIT]_azure version = 0.2 author = [USER] author_email = [USER]@[OMIT].com description = A package containing utilities for interacting with Azure long_description = file: README.md long_description_content_type = text/markdown project_urls = classifiers = Programming Language :: Python :: 3 License :: OSI Approved :: MIT License Operating System :: OS Independent [options] package_dir = = src packages = find: python_requires = >=3.7 install_requires = azure-storage-file-datalake>="12.6.0" pyspark>="3.2.1" openpyxl>="3.0.9" pandas>="1.4.2" pyarrow>="8.0.0" fsspec>="2022.3.0" adlfs>="2022.4.0" [OMIT]-utils>="0.4" [options.packages.find] where = src
求助
是否有开发者遇到过同类问题,求对应解决方案,非常感谢。
内容的提问来源于stack exchange,提问作者walzer91
相关产品推荐
相关产品推荐

