我有一个用Python编写的GUI程序。为了不必担心环境,它作为一个用PyInstaller构建的可执行文件分发。我可以通过模块中定义为MyModule.build()
的函数运行此构建(因为对我来说,与项目本身一起管理该脚本更有意义)。
我想在某种程度上自动化这一点,这样当在Gitlab上添加一个新版本时,它可以由一个运行程序构建并附加到发行版中。我目前使用的方法是实用的,但很麻烦:
我使用Gitlab API下载发布版的标记源。我在跑步者的环境中运行python -m pip install -r {requirements_path}
和python -m pip install {source_path}
。然后导入并运行MyModule.build()
函数以生成可执行文件。然后通过Gitlab API上传并链接到发布版。
很明显中间的部分需要。对于类似的项目,最好的方法是什么?包和要求是否可以安装在一个单独的venv中,而不是运行在其中的运行脚本?
发布于 2022-08-12 17:49:45
一个工作流程是推送一个标记来创建您的发行版。以下作业具有rules:
配置,因此它们仅在标记管道上运行。
一个作业将生成可执行文件。另一个作业将使用在第一个作业中创建的文件创建GitLab发行版。
build:
rules:
- if: "$CI_COMMIT_TAG" # Only run when tags are pushed
image: python:3.9-slim
variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
cache: # https://docs.gitlab.com/ee/ci/caching/#cache-python-dependencies
paths:
- .cache/pip
- venv/
script:
- python -m venv venv
- source venv/bin/activate
- python -m pip install -r requirements.txt # package requirements
- python -m pip install pyinstaller # build requirements
- pyinstaller --onefile --name myapp mypackage/__main__.py
artifacts:
paths:
- dist
create_release:
rules:
- if: "$CI_COMMIT_TAG"
needs: [build]
image: registry.gitlab.com/gitlab-org/release-cli:latest
script: # zip/upload your binary wherever it should be downloaded from
- echo "Uploading release!"
release: # create GitLab release
tag_name: $CI_COMMIT_TAG
name: 'Release of myapp version $CI_COMMIT_TAG'
description: 'Release created using the release-cli.'
assets: # link uploaded asset(s) to the release
- name: 'release-zip'
url: 'https://example.com/downloads/myapp/$CI_COMMIT_TAG/myapp.zip'
https://stackoverflow.com/questions/73333965
复制相似问题