Docker管道库
pypline-ci的Python项目详细描述
Pypline ci
用于基于容器的交付管道的Docker编排工具-为开发人员、测试人员和操作员提供用于本地工作站和交付管道基础设施的通用自动化测试工具。
我目前正在Docker的交付管道中进行实验,这个管道是用一种高级语言编写的,希望能够利用Python自带的面向对象的概念。虽然bash确实提供了在docker管道中编写docker脚本的简单功能;但在一定的规模下,跨多个集成存储库或项目创建和维护独立的脚本变得繁琐和低效。
为什么默认为python 2.7?
目前,Python2.7是大多数Docker开发工作站(流行的Linux发行版或MacOS)的本机版本。此工具的主要关注点是最小的依赖关系,但是,此库也与Python3兼容。
示例
生成图像并运行容器:
importosfrompyplineCIimportPipelinedirPath=os.path.dirname(os.path.realpath(__file__))buildPath=dirPath+'/docker/'localTag='local/foo:latest'pl=Pipeline()pl.build_image(buildPath,localTag)pl.rund(localTag)
从专用测试映像实现测试框架:
importosfrompyplineCIimportPipelinedirPath=os.path.dirname(os.path.realpath(__file__))volumes={dirPath:{'bind':'/tmp','mode':'rw'}}testDir='/tmp/tests'pl=Pipeline(dockerRegistry='registry.gitlab.com/christiantragesser/')pl.runi(image=pipeline.dockerRegistry+'my-test-image:latest',name='foo-test',working_dir=testDir,volumes=volumes,command='pytest')
为uat测试编排应用程序堆栈,然后在测试成功时删除所有容器:
importosfrompyplineCIimportPipelinedirPath=os.path.dirname(os.path.realpath(__file__))cleanUp=[]uat_volume={dirPath:{'bind':'/tmp','mode':'rw'}}testDir='/tmp/tests'db_env_vars={'MYSQL_ROOT_PASSWORD':'root','MYSQL_DATABASE':'foo-db','MYSQL_ROOT_HOST':'%'}app_env_vars={'DB_HOST':'mysql-test','DB_USER':'root','DB_PASSWORD':'root','DATABASE':'foo-db'}pl=Pipeline()cleanUp.append(pl.rund(image='mysql:5.7',name='mysql-test',environment=db_env_vars))cleanUp.append(pl.rund(image='local/foo_app',name='foo-app-test',environment=app_env_vars))pl.runi(image='tutum/curl:latest',name='foo-uat',working_dir=testDir,volumes=uat_volume,command='./uat.sh foo-app-test:5000')pl.purge_containers(cleanUp)
对Docker图像执行CVE扫描:
frompyplineCIimportPipelinepl=Pipeline()pl.cve_scan('nginx:latest')
API参考
管道(网络='ci_net',dockerregistry='library/')
类pypline ci.pyplineci.pipeline
- 创建网络(网络)>创建Docker管道网络。
参数:
- 网络(str)-管网名称,默认值
ci\u net
- 生成图像(路径,标记)>生成Docker图像。
参数:
- path(str)—包含dockerfile的目录的路径。
- tag(str)—应用于新建图像的标记。
- 拉取图像(图像)拉取给定名称的图像,类似于
docker pull
命令。如果未指定标记,则将从该存储库中提取所有标记。
参数:
- 图像(str)-要拉取的图像名称。
- rund(映像,stderr=none,ports=none,volumes=none,name=none,environment=none,network=<;obj network>;,command=none,detach=true,remove=false)。|
对提供的映像执行拉取操作,运行守护容器,然后返回容器ID。
参数:
- 环境(dict或list)—要在容器内设置的环境变量。
- 映像(str)—要更新和运行的映像。
- 名称(str)—此容器的名称。
- 端口(dict)-端口绑定到容器。字典的键是要在容器内绑定的端口,可以是整数,也可以是port/protocol格式的字符串,协议可以是tcp或udp。字典的值是要在主机上打开的相应端口。
- 卷(dict)-配置装入容器中的卷。
- runi(映像,命令,名称=无,卷=无,工作目录='/root',tty=真,环境=无,stdin打开=真,网络=<;obj network>;,auto_remove=false)对提供的映像执行拉取操作,运行实现所提供命令的交互式容器,然后返回容器stdout记录和命令退出状态(零或非零)。
参数:
- 命令(str)-命令在容器中运行。
- 环境(dict或list)—要在容器内设置的环境变量。
- 映像(str)—要更新和运行的映像。
- 名称(str)—此容器的名称。
- 端口(dict)-端口绑定到容器。字典的键是要在容器内绑定的端口,可以是整数,也可以是port/protocol格式的字符串,协议可以是tcp或udp。字典的值是要在主机上打开的相应端口。
- 卷(dict)-配置装入容器中的卷。
- 工作目录(str)-工作目录的路径。
- 清除容器(ids)按容器id强制删除容器。
参数:
- ids(list)-要删除的容器id列表。
- CVE_U扫描(扫描图像)使用coreos clair执行Docker图像的CVE扫描。
参数:
- 扫描图像(str)-要扫描的图像。
安装
管道(网络='ci_net',dockerregistry='library/')
类pypline ci.pyplineci.pipeline
- 创建网络(网络)>创建Docker管道网络。
参数:- 网络(str)-管网名称,默认值
ci\u net
- 网络(str)-管网名称,默认值
- 生成图像(路径,标记)>生成Docker图像。
参数:- path(str)—包含dockerfile的目录的路径。
- tag(str)—应用于新建图像的标记。
- 拉取图像(图像)拉取给定名称的图像,类似于
docker pull
命令。如果未指定标记,则将从该存储库中提取所有标记。
参数:- 图像(str)-要拉取的图像名称。
- rund(映像,stderr=none,ports=none,volumes=none,name=none,environment=none,network=<;obj network>;,command=none,detach=true,remove=false)。|
对提供的映像执行拉取操作,运行守护容器,然后返回容器ID。
参数:- 环境(dict或list)—要在容器内设置的环境变量。
- 映像(str)—要更新和运行的映像。
- 名称(str)—此容器的名称。
- 端口(dict)-端口绑定到容器。字典的键是要在容器内绑定的端口,可以是整数,也可以是port/protocol格式的字符串,协议可以是tcp或udp。字典的值是要在主机上打开的相应端口。
- 卷(dict)-配置装入容器中的卷。
- runi(映像,命令,名称=无,卷=无,工作目录='/root',tty=真,环境=无,stdin打开=真,网络=<;obj network>;,auto_remove=false)对提供的映像执行拉取操作,运行实现所提供命令的交互式容器,然后返回容器stdout记录和命令退出状态(零或非零)。
参数:- 命令(str)-命令在容器中运行。
- 环境(dict或list)—要在容器内设置的环境变量。
- 映像(str)—要更新和运行的映像。
- 名称(str)—此容器的名称。
- 端口(dict)-端口绑定到容器。字典的键是要在容器内绑定的端口,可以是整数,也可以是port/protocol格式的字符串,协议可以是tcp或udp。字典的值是要在主机上打开的相应端口。
- 卷(dict)-配置装入容器中的卷。
- 工作目录(str)-工作目录的路径。
- 清除容器(ids)按容器id强制删除容器。
参数:- ids(list)-要删除的容器id列表。
- CVE_U扫描(扫描图像)使用coreos clair执行Docker图像的CVE扫描。
参数:
- 扫描图像(str)-要扫描的图像。
安装在Docker主机上:
- 从pypi
$ pip install pypline-ci
或
- 通过Docker:
$ docker run --rm -it \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $PWD:/tmp \ -w /tmp \ registry.gitlab.com/christiantragesser/pypline-ci:latest /bin/sh
- 对于python 3:
$ docker run --rm -it \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $PWD:/tmp \ -w /tmp \ registry.gitlab.com/christiantragesser/pypline-ci:3 /bin/sh