python-3.xlinuxazure-devopsgithub-actionsazure-devops-self-hosted-agent

How to resolve 'UsePythonVersion@0' task failure on self hosted agent


I am trying to create a simple pipeline where python application code will be pulled from github enterprise and will be executed on the agent server itself. Here I am using Self hosted agent on a Linux VM.

trigger:
  branches:
    include:
      - master
      - refs/tags/*
      - feature*

stages:
  - stage: Deploy
    condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], 'refs/heads/master'), startsWith(variables['Build.SourceBranch'], 'refs/tags'), startsWith(variables['Build.SourceBranch'], 'refs/heads/feature')))
    jobs:
      - job: 'RunDeploymentCommandJob'
        displayName: Deploying job
        pool:
          name: Ppe-Gear-Price-Agent-Pool
        steps:
          - task: UsePythonVersion@0
            inputs:
              versionSpec: '3.6'  # Use Python 3.x
              addToPath: true
          - script: |
              cd gear-price-publisher
              # Install dependencies if needed
              pip install -r requirements.txt
              # Run the Python code
              gunicorn -w 1 -b 0.0.0.0:80 controller:app
            displayName: 'Run Python Code'

While code is successfully checked out Github Enterprise, UsePythonVersion task is getting failed with the below error for Gihub:

##[warning]You should provide GitHub token if you want to download a python release. Otherwise you may hit the GitHub anonymous download limit.
##[error]Failed to download Python from the Github Actions python registry (https://github.com/actions/python-versions). Error: AggregateError
##[error]Version spec 3.6 for architecture x64 did not match any version in Agent.ToolsDirectory.

Could you please suggest on this.

Thanks


Solution

  • If the Linux agent(mine is ubuntu 20.04) is able to access the python download page https://github.com/actions/python-versions, you can use the task in pipeline:

    - task: UsePythonVersion@0
      inputs:
        versionSpec: '3.6'
        addToPath: true
        architecture: 'x64'
    

    It will download the python package and try to prepare the tool cache folder structure for you:

    enter image description here

    The tool cache structure on the agent machine: enter image description here

    To resolve the error in the log ./python: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory, we can link it manually via command(change the path to your own):

    sudo ln -s ~/myagent/_work/_tool/Python/3.6.15/x64/lib/libpython3.6m.so.1.0 /usr/lib/libpython3.6m.so.1.0 
    

    After it's done, run again the pipeline:

    enter image description here