我们有一个内部包,我们将其发布到 AWS 代码工件并在另一个项目中使用。
我们在
pyproject.toml
中配置了针对不同环境(例如,开发和生产)的不同存储库,如下所示。部署时,相关存储库的凭据被配置为环境变量。
当我们部署到 prod 时,它会尝试连接到开发存储库并收到授权错误(预期)。我相信这是因为开发仓库是首先定义的。管理和配置它的正确方法是什么,以便我们可以针对不同的环境使用不同的存储库?
我们使用 GitHub Actions 进行部署。
[[tool.poetry.source]]
name = "codeartifact-dev"
url = "https://dev-env.com/pypi/beteende-constructs/simple/"
priority = "supplemental"
[[tool.poetry.source]]
name = "codeartifact-prod"
url = "https://prod-env.com/pypi/beteende-constructs/simple/"
priority = "supplemental"
在
pyproject.toml
文件中定义多个仓库的思路是正确的,但 Poetry 不会自动根据环境选择仓库。需要在部署过程中,根据环境设置
poetry
的配置。
以下是如何使用 GitHub Actions 实现此目的的步骤:
-
创建环境变量 : 在 GitHub 仓库的 Secrets 中,为每个环境分别创建存储库 URL 的环境变量,例如:
CODEARTIFACT_DEV_URL
和CODEARTIFACT_PROD_URL
。 -
修改 GitHub Actions 工作流 : 在的 GitHub Actions 工作流文件中,根据部署环境设置
poetry
配置,使用相应的环境变量。例如,对于生产环境:
jobs:
deploy-prod:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Configure Poetry
run: |
poetry config repositories.codeartifact-prod "${{ secrets.CODEARTIFACT_PROD_URL }}"
poetry config source add codeartifact-prod -u "${{ secrets.CODEARTIFACT_PROD_URL }}"
- name: Install dependencies
run: poetry install
# ... other deployment steps
解释 :
-
我们使用
poetry config repositories.codeartifact-prod ...
命令更新codeartifact-prod
仓库的 URL,使用存储在 GitHub Secrets 中的CODEARTIFACT_PROD_URL
环境变量。 -
我们使用
poetry config source add ...
命令将codeartifact-prod
添加为 Poetry 的 source,并指定其 URL。这确保 Poetry 能够找到并使用正确的仓库。 -
重复开发环境 : 为开发环境创建一个类似的工作流,使用
CODEARTIFACT_DEV_URL
环境变量。
其他注意事项 :
-
确保在
pyproject.toml
中,codeartifact-dev
和codeartifact-prod
的priority
设置为相同的值,例如supplemental
,以便 Poetry 能够根据配置找到正确的仓库。 -
如果在部署过程中需要身份验证,请确保在 GitHub Secrets 中设置必要的凭据,并在工作流中配置
poetry
使用它们。
通过这种方式,可以在部署到不同环境时,使用不同的 CodeArtifact 仓库,并避免授权错误。
标签:python,github-actions,python-poetry,aws-codeartifact From: 78833204