Construir aplicativos Python

Azure DevOps Services | Azure DevOps Server | 2020 Azure DevOps Server 2019

Pode utilizar os Pipelines Azure para construir, testar e implementar aplicações e scripts Python como parte do seu sistema CI/CD. Este artigo centra-se na criação de um oleoduto básico.

Se quiser um tutorial de ponta a ponta, consulte o Uso ci/CD para implementar uma aplicação web Python para Serviço de Aplicações do Azure no Linux.

Para criar e ativar um ambiente Anaconda e instalar pacotes Anaconda com conda, consulte os gasodutos Run com ambientes Anaconda.

Criar o seu primeiro pipeline

Novo em Azure Pipelines? Em caso afirmativo, recomendamos que experimente esta secção antes de passar para outras secções.

Obter o código

Importe este repo no seu Git repo em Azure DevOps Server 2019:

Importe este repo para o seu git repo:

https://github.com/Microsoft/python-sample-vscode-flask-tutorial

Inscreva-se nos Oleodutos Azure

Inscreva-se na Azure Pipelines. Depois de iniciar sposição, o seu navegador vai e https://dev.azure.com/my-organization-name exibe o seu dashboard Azure DevOps.

Dentro da sua organização selecionada, crie um projeto. Se não tiver projetos na sua organização, veja um Projeto Criar um projeto para começar a ser exibido. Caso contrário, selecione o botão Criar Project no canto superior direito do painel.

Criar o pipeline

  1. Inscreva-se na sua organização Azure DevOps e vá ao seu projeto.

  2. Vá a Pipelines e, em seguida, selecione Novo oleoduto.

  3. Faça os passos do assistente selecionando GitHub como a localização do seu código fonte.

  4. Pode ser redirecionado para GitHub para se inscrever. Em caso afirmativo, insira as suas credenciais GitHub.

  5. Quando vir a lista de repositórios, selecione o seu repositório.

  6. Pode ser redirecionado para GitHub instalar a aplicação Azure Pipelines. Em caso afirmativo, selecione Aprovar & instalar

Quando o separador Configure aparecer, selecione o pacote Python para criar um pacote Python para testar em várias versões Python.

  1. Quando o seu novo oleoduto aparecer, dê uma olhada na YAML para ver o que faz. Quando estiver pronto, selecione Save and run.

    Save and run button in a new YAML pipeline

  2. Foi-lhe pedido que entregasse um novo ficheiro azure-pipelines.yml ao seu repositório. Depois de ficar satisfeito com a mensagem, selecione Save e corra novamente.

    Se quiser ver o seu oleoduto em ação, selecione o trabalho de construção.

    Acabaste de executar um oleoduto que criamos automaticamente para ti, porque o teu código parecia ser uma boa combinação para o modelo do pacote Python .

    Tem agora um oleodutoazure-pipelines.yml YAML em funcionamento () no seu repositório que está pronto para personalizar!

  3. Quando estiver pronto para fazer alterações no seu pipeline, selecione-o na página Pipelines e, em seguida, edite o azure-pipelines.yml ficheiro.

Leia mais adiante para saber algumas das formas mais comuns de personalizar o seu oleoduto.

YAML

  1. Adicione um azure-pipelines.yml ficheiro no seu repositório. Personalize este corte para a sua construção.
trigger:
- master

pool: Default

steps:
- script: python -m pip install --upgrade pip
  displayName: 'Install dependencies'

- script: pip install -r requirements.txt
  displayName: 'Install requirements'
  1. Crie um oleoduto (se não souber como, consulte criar o seu primeiro pipeline) e para o modelo selecionar YAML.

  2. Desajei a piscina do Agente e o caminho do ficheiro YAML para o seu oleoduto.

  3. Guarde o oleoduto e faça fila. Quando a mensagem Build #nnnnnnnn.n tiver sido a mensagem da fila , selecione o link de números para ver o seu pipeline em ação.

  4. Quando estiver pronto para fazer alterações no seu oleoduto, edite-o .

Leia mais adiante para saber algumas das formas mais comuns de personalizar o seu oleoduto.

Construir ambiente

Não tens de preparar nada para a Azure Pipelines construir projetos Python. Python está pré-instalado em agentes de construção hospedados pela Microsoft para Linux, macOS ou Windows. Para ver quais as versões Python pré-instaladas, consulte utilizar um agente hospedado pela Microsoft.

Use uma versão pitão específica

Para utilizar uma versão específica de Python no seu oleoduto, adicione a tarefa Use Python Version a azure-pipelines.yml. Este corte define o gasoduto para usar Python 3.6:

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.6'

Use várias versões Python

Para executar um oleoduto com várias versões Python, por exemplo para testar um pacote contra essas versões, defina um job com uma matrix das versões Python. Em seguida, desa esta altura, UsePythonVersion a tarefa de referência da matrix variável.

jobs:
- job: 'Test'
  pool:
    vmImage: 'ubuntu-latest' # other options: 'macOS-latest', 'windows-latest'
  strategy:
    matrix:
      Python27:
        python.version: '2.7'
      Python35:
        python.version: '3.5'
      Python36:
        python.version: '3.6'

  steps:
  - task: UsePythonVersion@0
    inputs:
      versionSpec: '$(python.version)'

Pode adicionar tarefas a executar utilizando cada versão Python na matriz.

Executar scripts do Python

Para executar scripts Python no seu repositório, use um script elemento e especifique um nome de arquivo. Por exemplo:

- script: python src/example.py

Também pode executar scripts Python inline com a tarefa Python Script:

- task: PythonScript@0
  inputs:
    scriptSource: 'inline'
    script: |
      print('Hello world 1')
      print('Hello world 2')

Para parametrizar a execução do script, utilize a PythonScript tarefa com arguments valores para passar argumentos para o processo de execução. Você pode usar sys.argv ou a biblioteca mais sofisticada argparse para analisar os argumentos.

- task: PythonScript@0
  inputs:
    scriptSource: inline
    script: |
      import sys
      print ('Executing script file is:', str(sys.argv[0]))
      print ('The arguments are:', str(sys.argv))
      import argparse
      parser = argparse.ArgumentParser()
      parser.add_argument("--world", help="Provide the name of the world to greet.")
      args = parser.parse_args()
      print ('Hello ', args.world)
    arguments: --world Venus

Instalar dependências

Pode utilizar scripts para instalar pacotes PyPI específicos com pip. Por exemplo, este YAML instala ou atualiza e pip as setuptools embalagens e wheel pacotes.

- script: python -m pip install --upgrade pip setuptools wheel
  displayName: 'Install tools'

Instalar requisitos

Depois de atualizar pip e amigos, um passo típico seguinte é instalar dependências de requirements.txt:

- script: pip install -r requirements.txt
  displayName: 'Install requirements'

Testes de execução

Utilize scripts para instalar e executar vários testes no seu oleoduto.

Fazer testes de linho com flocos8

Para instalar ou atualizar flake8 e usá-lo para esroçar testes de pelos, utilize este YAML:

- script: |
    python -m pip install flake8
    flake8 .
  displayName: 'Run lint tests'

Teste com pytest e colete métricas de cobertura com pytest-cov

Utilize este YAML para instalar pytest e pytest-cov, executar testes, resultados de testes de saída no formato JUnit e a cobertura do código de saída resulta no formato Cobertura XML:

- script: |
    pip install pytest pytest-azurepipelines
    pip install pytest-cov
    pytest --doctest-modules --junitxml=junit/test-results.xml --cov=. --cov-report=xml
  displayName: 'pytest'

Fazer testes com Tox

A Azure Pipelines pode executar trabalhos paralelos de teste tox para dividir o trabalho. Num computador de desenvolvimento, tens de executar os teus ambientes de teste em série. Esta amostra usa tox -e py para executar qualquer versão de Python está ativa para o trabalho atual.

- job:

  pool:
    vmImage: 'ubuntu-latest'
  strategy:
    matrix:
      Python27:
        python.version: '2.7'
      Python35:
        python.version: '3.5'
      Python36:
        python.version: '3.6'
      Python37:
        python.version: '3.7'

  steps:
  - task: UsePythonVersion@0
    displayName: 'Use Python $(python.version)'
    inputs:
      versionSpec: '$(python.version)'

  - script: pip install tox
    displayName: 'Install Tox'

  - script: tox -e py
    displayName: 'Run Tox'

Publicar resultados dos testes

Adicione a tarefa 'Resultados dos Testes de Publicação' para publicar os resultados dos testes JUnit ou xUnit no servidor:

- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testResultsFiles: '**/test-*.xml'
    testRunTitle: 'Publish test results for Python $(python.version)'

Publicar resultados de cobertura de código

Adicione a tarefa 'Publicar Resultados de Cobertura de Código' para publicar os resultados da cobertura de código no servidor. Pode ver as métricas de cobertura no resumo da construção e baixar os relatórios HTML para mais análises.

- task: PublishCodeCoverageResults@1
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'

Pacote e entregue código

Para autenticar, twineutilize a tarefa Twine Authenticate para armazenar credenciais de autenticação na PYPIRC_PATH variável ambiente.

- task: TwineAuthenticate@0
  inputs:
    artifactFeed: '<Azure Artifacts feed name>'
    pythonUploadServiceConnection: '<twine service connection from external organization>'

Em seguida, adicione um script personalizado que usa twine para publicar os seus pacotes.

- script: |
   twine upload -r "<feed or service connection name>" --config-file $(PYPIRC_PATH) <package path/files>

Também pode usar a Azure Pipelines para construir uma imagem para a sua aplicação Python e empurrá-la para um registo de contentores.