如何通过GitHub Actions阻止已存在版本的Python包上传至Artifactory
实现方案
该需求可以通过GitHub Actions工作流实现,只需在现有部署步骤前新增版本校验逻辑即可,具体修改如下:
修改后的完整工作流片段
- name: Configure pip conf env: PYCONF: ${{ secrets.DI_PY_PIP_CONF }} run: | mkdir -p ~/.pip echo "$PYCONF" > ~/.pip/pip.conf - name: Check package version exists in Artifactory run: | # 提取当前包的名称和版本号,适配所有标准setup.py写法 PKG_NAME=$(python setup.py --name) PKG_VERSION=$(python setup.py --version) # 尝试空运行安装对应版本,判断是否已在Artifactory存在 if pip install --dry-run --no-deps ${PKG_NAME}==${PKG_VERSION} > /dev/null 2>&1; then echo "错误:版本 ${PKG_VERSION} 已在Artifactory中存在,终止发布" exit 1 fi echo "版本 ${PKG_VERSION} 不存在,可正常发布" - name: Deploying Package env: PYRC: ${{ secrets.DI_PYPIRC }} run: | echo "$PYRC" >> ~/.pypirc ls -a python setup.py sdist bdist_wheel upload -r local
注意事项
- 如果pip查询受环境限制,也可以替换为调用Artifactory开放API查询指定包的版本列表,核心逻辑都是比对当前版本和远端已发布版本,命中就终止流程
- 若需求调整为跳过发布而非失败终止,只需把
exit 1替换为设置GitHub Actions输出变量,后续发布步骤判断变量值决定是否执行即可
内容的提问来源于stack exchange,提问作者qwerty
相关产品推荐
相关产品推荐

