4

我目前使用下面的脚本来构建我的包并将其发布到私有 Azure Artifacts 源。在每个脚本中,我都必须运行该行source $HOME/.poetry/env,否则它找不到诗歌命令。

有没有办法消除这种重复?

完整脚本:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

strategy:
  matrix:
    Python38:
      python.version: '3.8'

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

- script: |
    sudo apt-get install texlive texlive-latex-extra latexmk
    python -m pip install --upgrade pip
    python -m pip install keyring artifacts-keyring
    curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
    source $HOME/.poetry/env
    poetry install
  displayName: 'Install package and tools'

- script: |
    source $HOME/.poetry/env
    poetry run python -m isort -rc
    poetry run python -m black -l 79 .
  displayName: 'Format code'

- script: |
    source $HOME/.poetry/env
    poetry run python -m flake8
    poetry run python -m bandit -r ini=.bandit .
    poetry run python -m mypy --config-file=mypy.ini src/preppy/ tests/ docs/
  displayName: 'Lint code'

- script: |
    source $HOME/.poetry/env
    poetry run python -m pytest tests/
  displayName: 'Test code'

- script: |
    source $HOME/.poetry/env
    poetry run make clean
    poetry run make latexpdf
  workingDirectory: docs
  displayName: 'Build documentation'

- script: |
    source $HOME/.poetry/env
    poetry build
  displayName: 'Create package'

- script: |
    source $HOME/.poetry/env
    poetry config repositories.azure https://pkgs.dev.azure.com/MY_USERNAME/preppy/_packaging/builds/pypi/upload
    poetry publish -r azure --username=$(pipelines-token) --password=$(pipelines-token)
    exit 0
  displayName: 'Publish artifact'
4

1 回答 1

3

source $HOME/.poetry/env仅适用于当前外壳。您需要PATH在代理系统中设置 Poetry 的 bin 目录($HOME/.poetry/bin)。

请添加echo "##vso[task.setvariable variable=PATH]${PATH}:$HOME/.poetry/bin"您的第一个脚本任务以设置$HOME/.poetry/bin系统 PATH 变量的路径。然后您将不再需要添加source $HOME/.poetry/env以下脚本任务。请检查以下示例。

echo "##vso[task.setvariable...."只会在以下任务中生效。

所以你仍然需要在第一个脚本任务中使用“source $HOME/.poetry/env”。

请检查在脚本中设置变量以获取更多信息。

- script: |
    curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

    #below script will only take effect in the following tasks. 
    #So you still need to use "source $HOME/.poetry/env" in the first script task.

    echo "##vso[task.setvariable variable=PATH]${PATH}:$HOME/.poetry/bin" 
    source $HOME/.poetry/env

    poetry install
  displayName: 'Install package and tools'

- script: |
    poetry --version
  condition: always()
于 2020-03-13T03:59:36.483 回答