python可以自动录凭证_gitlab+jenkins自动发布Python包到私有仓储

背景

有个私有仓储,地址为https://your.repo.com/pypi/

代码存储在gitlab, 地址为https://gitlab.company.com/software.git

CI为jenkins

常规解决手法

jenkins有一个特定的节点,节点里面已经配置好了%HOMEPATH%/.pypirc

[distutils]

index-servers =

deploy

[deploy]

repository=https://your.repo.com/pypi/

username=youraccmount

password=yourpwd

然后直接使用

python setup.py sdist upload -r deploy

问题

权限控制

私有仓储存在一个权限, 只有高级别的账号才能push. 而所有人都可以pull包. 那么就存在一个问题. 绝对不能将leader的账户密码直接记录在jenkins节点的配置中.这样很容易就暴露权限.

如果换了台节点

常用方法需要在节点配置.pypirc文件. 如果我想换台节点,还需要登陆到新节点进行配置.这样非常不方便.

需求

绝对不能暴露高级别的账号密码

对节点无特殊需求, CI任务换哪个节点都可以

希望能够自定义包的版本. 而不是每次都是某个固定的版本

我提交代码到gitlab. 然后就自动发布到仓储

解决

我新打了一个tag0.1.1, 然后我的私有仓储就有一个client0.1.1的包

通过expect解决需要交互式输入用户名密码的问题

通过gitlab push解决自动发布的问题

通过设置环境变量解决tag转化为包版本的问题

设置仓储名, 指定分支为refs/tags/*. 这样只会编译tag分支

增加jenkins自动触发

gitlab 配置事件推送

注入密码到环境变量

手动添加凭据

shell脚本

这里有一个难题要解决, 首先jenkins shell执行相当于在目标机器下发了一个文件. 如果要用expect 都是只能采用#!/usr/bin/expect头来执行. 可是使用#!/usr/bin/expect作为shell脚本执行器,很多命令又没办法用. 所以采用#!/usr/bin/expect -c "command"来执行

#!/bin/bash

# 注入环境变量

set -e

# 将Tag版本传到环境变量,Setup.py会读取这个环境变量

version=`basename $GIT_BRANCH`

export VERSION=$version

here=`pwd`

# 安装打包辅助库twine到默认python环境

pip install twine

# 打包

python setup.py sdist

# 使用expect进行交互式用户名,密码输入, 这里需要将yourpackagename改成python包名

/usr/bin/expect -c "spawn twine upload --repository-url https://your.repo.com/pypi/ "$here"/dist/yourpackage-"$version".tar.gz; expect "*username:" ; send ${ADMIN_USER}\r; expect "*password:"; send ${ADMIN_PWD}\r; expect eof"

而在setup.py中,使用环境变量作为当前版本

setuptools.setup(

...

version=os.getenv("VERSION", "0.1.0")

...

)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是从0到1使用 Docker + Jenkins + Git + Pytest + Allure 搭建项目自动化框架的步骤: 1. 安装 Docker 并启动 Docker 服务。Docker 是一个容器化平台,可以在容器中部署应用程序和服务。 2. 在 Docker 中安装 JenkinsJenkins 是一个开源的自动化工具,可以用于自动化构建、测试和部署软件。 3. 在 Git 上创建一个新的代码仓库,用于存储项目代码。Git 是一个分布式版本控制系统,可以用于管理代码的版本和变更历史记。 4. 在 Jenkins 中创建一个新的项目,用于自动化构建和测试项目代码。在 Jenkins 中配置 Git 仓库的地址和凭据信息,以便 Jenkins 可以从 Git 仓库中拉取代码。 5. 在 Jenkins 中配置构建步骤,包括在 Docker 中构建应用程序的 Docker 镜像,运行 Pytest 测试套件,生成 Allure 测试报告等。 6. 在 Jenkins 中配置后续步骤,例如将 Docker 镜像推送到 Docker Hub 或者私有的 Docker 仓库中,或者部署应用程序到生产环境中。 7. 在 Docker 中安装 Pytest 和 Allure,用于运行测试套件并生成测试报告。Pytest 是一个 Python 测试框架,可以用于编写和运行测试用例。Allure 是一个测试报告框架,可以用于生成漂亮的测试报告。 8. 在 Docker 中运行 Pytest 测试套件,并使用 Allure 生成测试报告。 9. 在 Jenkins 中配置测试报告的发布步骤,以便 Jenkins 可以将测试报告发布Jenkins 服务器中,并将测试报告链接发送给相关人员。 以上是从0到1使用 Docker + Jenkins + Git + Pytest + Allure 搭建项目自动化框架的步骤。需要注意的是,这只是一个基本的框架搭建流程,具体的实现方式和细节需要根据实际情况进行调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值