当前位置: 首页>编程语言>正文

Jenkins中以Jenkins用户运行 jenkins执行命令

前言

需求背景:

    目前3台服务器实现负载均衡和水平扩展的有相同的Python环境(已部署Jenkins),并维护几乎相同的pip环境(目前未采用虚拟Python去管理执行),若需要维护或更新换环境操作相对繁琐。

    比如:需要新增一个python依赖包,需要登陆服务器堡垒机并依次执行pip相关命令,并重复上述步骤3次,耗时且有时容易搞混,那么是否有简化方案呢?

解决方案:

低成本

    1、低成本,Jenkins 参数化执行cmd命令,手动进入Jenkins分别执行3次,减少登陆堡垒机这一步,执行命令回调在Jenkins日志查看。

Jenkins中以Jenkins用户运行 jenkins执行命令,Jenkins中以Jenkins用户运行 jenkins执行命令_pip管理,第1张

中成本(不介绍)

    2、中成本,Jenkins 参数化执行cmd命令,在低成本方案上,开发支持API接口调度3台Jenkins机器分别去执行任务,执行命令任务结果回调通过Jenkins日志查看。

高成本(不介绍)

    3、高成本,在中成本的方案上继续新增,包管理(CRUD)操作的回调并把关键性入口存储,并保留平台操作日志。

Jenkins中以Jenkins用户运行 jenkins执行命令,Jenkins中以Jenkins用户运行 jenkins执行命令_pip_02,第2张

低成本落地方案

虽然采用低成本方案解决目前的需求,在项目落地时不仅需要考虑功能实现,同时也需要兼具命令安全性

Python pip包管理 
1、 Jenkins 任务执行 cmd命令实现pip命令操作
2、 shell命令限制仅pip可执行
3、 项目安全,匿名用户不可见

1、Jenkins 任务执行 cmd命令实现pip命令操作

1.1 Jenkins 参数配置 示例图

Jenkins中以Jenkins用户运行 jenkins执行命令,Jenkins中以Jenkins用户运行 jenkins执行命令_pip管理_03,第3张

1.2 Jenkins参数通过Shell执行 示例图

Jenkins中以Jenkins用户运行 jenkins执行命令,Jenkins中以Jenkins用户运行 jenkins执行命令_python_04,第4张

1.3 Jenkins任务执行结果 示例图

Jenkins中以Jenkins用户运行 jenkins执行命令,Jenkins中以Jenkins用户运行 jenkins执行命令_jenkins_05,第5张

2、 shell命令限制仅pip可执行

2.1 shell命令限制仅pip可执行 示例代码

strA=${python_pip_operation:0:3}
strB="pip"
if [[ $strA == $strB ]]
then
  echo $(date +%F%n%T)    "命令为pip操作可正常执行,执行结果如下:"
  ${python_pip_operation}
else
  echo $(date +%F%n%T)    "命令不包含pip,请勿尝试非法操作"
fi

问:为什么要限制仅限pip命令执行?

答:通过Jenkins支持操作cmd命令操作是及其危险的,通过前置校验进行pip相关的操作可以过滤掉大部分安全威胁,避免安全风险问题暴露。

3、项目安全,匿名用户不可见

3.1 启动项目安全,且设置为  不要从其他ACL继承权限授予

限制匿名未登录用户直接操作pip命令,通过前置登陆鉴权限制任意用户恶意修改

Jenkins中以Jenkins用户运行 jenkins执行命令,Jenkins中以Jenkins用户运行 jenkins执行命令_pip_06,第6张

4、水平扩展配置项目落地并调试

重试上述步骤1、2、3,并在需要配置的服务器环境配置好Jenkins任务,并检查配置完整性

Jenkins中以Jenkins用户运行 jenkins执行命令,Jenkins中以Jenkins用户运行 jenkins执行命令_Jenkins_07,第7张

4.1 Jenkins任务配置自测简易指南

测试用例

1、登陆用户,执行pip list命令,执行通过

2、登陆用户,执行pip3 list命令,执行通过

3、登陆用户,执行pip3 xxx命令,执行通过

4、登陆用户,执行 ls 或 rm -rf xx 命令,执行不通过

5、未登录用户,无法查看到该项目

小结

至此已完成低成本的对3台服务器的Python pip包管理操作,通过Jenkins配置任务实现管理,可以减少登陆堡垒机的操作。

但是从解决实际问题的脚本看并未完全解决,1次操作重试3次完成对3台服务器的同步操作,只是使用了一种较低成本的方法简化了部分操作。

至于中成本或高成本

API层:
1、API接口 需要维护一个接口传入命名行参数
2、Jenkins 任务需同时依次调度3个服务器

3、最终执行结果通过API接口返回还是在Jenkins控制台输出查看日志

最终需要考虑实现成本和该项目的落地后具体的使用方是谁?这里不在深究


https://www.xamrdz.com/lan/58z1959824.html

相关文章: