docker+git+jenkins构建Python自动化项目

梳理一下最近搭建的一个模拟自动化环境,使用服务器为2核+2GRAM,centos8,需要的软件有docker容器软件,git镜像软件,Jenkins镜像软件,allure软件压缩包。本文只对使用到的命令进行解释,其他命令自己扩展。

整体思路

将git仓库与Jenkins部署到docker容器中,然后将容器数据映射到宿主机中,保证数据安全,在容器崩掉后能快速恢复环境及数据。整体架构如下图所示:
在这里插入图片描述

docker的准备

环境检查

确保操作系统中没有docker,如果有自行判断是否需要重装,移除命令如下:

# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine -y

安装docker-ce的依赖包

# yum install -y yum-utils device-mapper-persistent-data lvm2

安装成功截图

添加稳定的版本源

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

添加成功截图

安装docker-ce

安装过程会有两次提示,输入y继续,也可以在下面命令中加入-y参数

# yum install docker-ce

安装成功截图

启动docker

[root@panzer /]# systemctl start docker

启动成功截图

Git仓库容器准备

git仓库是作为一个容器运行在docker里面的,所以直接使用docker搜索镜像即可,这里使用的gogs,由gogs提供Git服务,使用web访问服务,方便快捷,相比纯命令行更友好。

搜索并下载镜像

[root@panzer secrets]# docker search gogs/gogs  # 搜索镜像
[root@panzer secrets]# docker pull gogs/gogs  # 拉取镜像
[root@panzer secrets]# docker images # 查看拉取到本地的镜像

搜索与拉取
拉取成功截图

启动镜像

准备挂载git仓库的宿主机目录

注意目录不固定,根据自己情况创建,后续使用该目录应同步变更。

[root@panzer home]# mkdir git_data  创建目录
[root@panzer home]# chmod 777 git_data/  赋予权限

创建成功截图

启动镜像

[root@panzer home]# docker run -d -uroot --name=git_server -p 10022:22 -p 10086:3000 -v /home/git_data:/data gogs/gogs
命令解释
run启动一个容器
-d后台运行
-uroot管理员身份运行
–name=git_server容器名称,自定义
-p 10022:22宿主机端口:容器端口,将容器的22端口映射到宿主机的10022端口
-p 10086:3000同上,10086端口就是web访问git服务的端口,可根据自己情况调整
-v /home/git_data:/data宿主机目录:容器目录,将容器内的data目录,映射到宿主机的/home/git_data,实现数据本地化,根据自己创建的目录调整
gogs/gogs需要启动的镜像名字/id
[root@panzer home]# docker ps -a 查看所有容器

启动成功截图

web访问安装git

通过页面访问URL:http://属主机IP:10086即可访问服务,并对安装git仓库。这里使用的轻量型的数据库,其他数据库也行,可能需要更高主机的配置。按照下图安装即可
安装git页面设置
注意这个运行系统用户:git,这个和ssh拉取推送代码有关,没有研究这个的密码,你们自己研究研究。

登录git

一开始是没有账号的,自己 根据自己需要注册好就行,注册完就登录,使用http的方式拉取和推送代码就是使用这个账号。
注册用户后登录
登录成功后创建一个仓库,仓库创建成功后会得到远程仓库的地址,如下图的http/ssh:
仓库创建成功

克隆仓库到本地

本地要先安装一个本地git仓库,百度搜索官网,下载,傻瓜式安装就可以了,然后找一个存放远程仓库的地方(我的是pycharm的项目目录里面),在存放远程仓库目录下面点击鼠标右键,选择git bash here(一定要装好本地git才会有这个命令行工具),将下图中的连接复制下来备用。
在这里插入图片描述

克隆仓库方式1-http

$ git clone http://服务器IP:端口/panzer/panzer_api_test.git

过程会有提示输入账号和密码,该账号密码为web页面注册的账号密码。

克隆仓库方式2-ssh

$ git clone git@服务器ip:panzer/panzer_api_test.git

我这里没有研究这个git怎么用,你们可以自己试试。

查看仓库是否下载成功

仓库下载成功,在本地目录中会有一个和仓库名一样的文件目录,且git命令行会提示下载了一个空仓库,这里没有截图,自己注意检查。现在开始检查远程仓库是否添加成功,进入仓库目录,右键git bash here。

$ git remote -v  # 查看配置的远程仓库

这里查询出来的地址应该和网页中提供的仓库地址是一致的。这样推送的远程仓库就配置好了,克隆远程仓库时,会将远程仓库的配置一并克隆下来,在本地目录内会有一个.git的隐藏目录,该目录内就是关于远程仓库的配置,所以克隆完成就自动配置好了远程仓库。如果没有.git目录,那么远程仓库应该是没有初始化成功,还不能使用。
远程仓库

本地代码管理

这里的本地代码就是指使用pycharm在本地直接编辑的代码,有了本地仓库后,可以在本地仓库内新建项目开始编辑代码。这里使用模拟代码,复制已有的代码目录放到本地git仓库中

代码跟踪

$ git add . # 跟踪仓库中所有的文件

在这里插入图片描述

查看代码文件跟踪情况

$ git status # 查看文件跟踪状态

如果跟踪成功文件会变为绿色,如果文件显示为红色则表示没有被跟踪。
在这里插入图片描述

提交代码到本地仓库

$ git commit -m '第一次提交' # 提交代码 ‘’中的为备注方便记录变更

在这里插入图片描述

推送代码到远程仓库

$ git push origin # 推送到远程仓库,就是origin这个名字的仓库

可以使用 git remote -v 查看远程仓库的名字,就是第一列的,默认是origin,可以使用git remote rename 来进行修改。推送有一个过程,会有进度提示,都100%了就推送完成了。
在这里插入图片描述

检查远程仓库中是否有代码

如果推送成功,远程仓库内应该会有相应的代码,备注,以及推送的id,如下图所示就表示基本成功了。
在这里插入图片描述
提示一个小坑:生产环境中维护代码不止一个人,每天早上上班编辑代码前先运行一下下面命令,保证本地代码库与远程代码库的一致再编辑提交。

$ git pull --rebase origin master  # origin为远程仓库名 更新 本地代码库,防止别人修改远程仓库代码,而自己本地没有修改

Jenkins容器部署

下载容器

回到服务器上,安装部署Jenkins容器。

[root@panzer /]# docker search jenkins # 查询Jenkins镜像

这里使用的是第二个
在这里插入图片描述

[root@panzer /]# docker pull jenkins/jenkins # 拉取镜像到服务器

在这里插入图片描述

[root@panzer /]# docker images # 查看本地镜像

如下图所示,表示容器镜像下载成功
在这里插入图片描述

启动容器

启动容器前先创建好挂载Jenkins数据的目录,在home目录下创建Jenkins_home,将docker中Jenkins容器内数据映射到该文件夹中,即使重建Jenkins容器数据也不会丢失

[root@panzer /]# mkdir -p /home/jenkins_home # 创建挂载目录
[root@panzer /]# chmod 777 /home/jenkins_home # 赋予权限

在这里插入图片描述

[root@panzer ~]# docker run -d -uroot -m 2g -p 8080:8080 -p 50000:50000 --restart=always -v /home/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /etc/localtime:/etc/localtime --name jenkins jenkins/jenkins
命令解释
run启动一个容器
-d后台运行启动
-uroot管理员身份运行
-m 2g设置内存为2g(根据自己情况设置,也可以不设置)
-p 8080:8080宿主机端口:容器端口,端口映射,http访问宿主机8080端口就是访问容器的8080端口
-p 50000:50000同上,这个端口貌似是JNLP的通讯端口
–restart=always挂掉后自动重启
-v /home/jenkins_home:/var/jenkins_home宿主机目录:容器目录,将容器内jenkins_home 目录内容映射到宿主机jenkins_home目录中,容器内的jenkins_home 目录内的workspace内就是Jenkins创建工程后保存数据的地方,也就是所谓的Jenkins工作目录
-v /var/run/docker.sock:/var/run/docker.sock保证容器内能使用docker命令,注:配置了没有生效
-v /usr/bin/docker:/usr/bin/docker外部docker启动目录
-v /etc/localtime:/etc/localtime同步宿主机时间,对于定时任务还是比较重要的
–name jenkins自定义容器名称
jenkins/jenkins需要启动的本地镜像名称
启动成功后如下图,使用docker ps -a 查看本地所有容器(包括未运行的容器),确认status状态为UP,表示容器正在运行。

在这里插入图片描述

Jenkins容器内环境准备

allure环境准备

下载好allure的tar包,上传到服务器,并复制到容器内
在容器内根目录下创建一个app目录用来存放所需要用的的环境包。

[root@panzer ~]# docker cp ./allure-commandline-2.13.2.tgz jenkins:/app/  # 复制allure压缩包到容器内
[root@panzer ~]# docker exec -it jenkins bash  # 进入容器

复制到容器内,进入容器并解压后如下图所示,可以把解压后的文件重命名为allure。注意后面的配置基本都是在容器内进行操作的,必须要进入到容器,不是在宿主机。注意看命令行头头的变化。
在这里插入图片描述

root@48934ea3315e:/app# chmod -R 777 allure # 赋予权限 此处已将解压后的allure文件夹更名为allure

在这里插入图片描述

root@48934ea3315e:/app/allure# ln -s /app/allure/bin/allure /usr/bin/allure  # 添加连接到bin

在/usr/bin/allure目录下执行 ls -il可以查看连接目录,必须在该目录下才能看到,添加软连接时源目录必须是真是存在的,我这里的源目录是我自己创建的,各位根据自己的实际情况进行调整。
在这里插入图片描述

root@48934ea3315e:/etc# vim profile 编辑
在文件中添加:export PATH=$PATH:/app/allure/bin 在文件最后添加allure安装路径,根据自己情况调整目录
root@48934ea3315e:/etc# sourcce profile 文件生效

在这里插入图片描述
输入allure命令出现下图提示,表示allure环境配合成功啦!!
在这里插入图片描述

Python环境准备

首先进入容器查看操作系统:

[root@panzer ~]# docker exec -it jenkins bash  # 进入容器
root@48934ea3315e:/# cat /etc/issue # 查看操作系统

这里查询到的是Debian,该操作系统没有yum,需要使用apt-get代替下载。
在这里插入图片描述
根据下面的操作进行

root@48934ea3315e:/app/python# apt-get update # 更新apt,必须更新,不然什么都下不了
root@48934ea3315e:/app/python# apt-get -y install gcc automake autoconf libtool make  # 安装make
root@48934ea3315e:/app/python# apt-get -y install make*  注意会有报错,有包冲突,继续往下装
root@48934ea3315e:/app/python# apt-get -y install zlib*
root@48934ea3315e:/app/python# apt-get -y install openssl libssl-dev
root@48934ea3315e:/app/python# apt-get install sudo

以上命令都是解决安装Python所需要的依赖的。

root@48934ea3315e:/app/python# apt-get install -y wget 安装weget,方便下载
root@48934ea3315e:/app/python# wget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tgz 下载Python包
root@48934ea3315e:/app/python# tar -zxvf Python-3.7.6.tgz   解压Python包

在这里插入图片描述
下面就是进行安装,主要步骤就是,编译-安装-建立软件连接,就算完成了。首先使用make进行编译进入到Python的解压目录下,查看是否存在configure文件,如果有就在该目录下执行编译。我的目录如下所示:
在这里插入图片描述
在这里插入图片描述

root@48934ea3315e:/app/python/Python-3.7.6# ./configure --prefix=/app/python --with-ssl
命令解释
./configure检查系统配置,生成Makefile文件,以便可以使用make和make install 进行编译、安装
–prefix=/app/python指定安装目录,这里是容器内的/app/python,根据自己情况调整
–with-ssl安装本文件所需要的库文件
使用make进行安装:
root@48934ea3315e:/app/python/Python-3.7.6# make  #该步骤时间较长,中间还会停顿,耐心等待安装完成
root@48934ea3315e:/app/python/Python-3.7.6# make install # 执行安装

出现下图内容表示安装成功:
在这里插入图片描述
为Python和pip添加软连接

root@48934ea3315e:/usr/bin# ln -sf /app/python/bin/python3.7 /usr/bin/python3  在环境中添加Python连接
root@48934ea3315e:/usr/bin# ln -sf /app/python/bin/pip3 /usr/bin/pip3  在环境中添加pip连接
root@48934ea3315e:/app# pip3 install --upgrade pip 升级PIP

连接建立成功后可以使用Python命令和pip命令验证是否安装配置成功。不成功检查/usr/bin目录下的连接是否正确,尤其是路径,到bin目录下使用 ls -il 检查。
在这里插入图片描述
安装自动化需要的库:这里我是将需要的库编辑在一个txt文本内,可以在本地使用DOS命令 pip free > /目录/文件.txt进行打包,上传到服务器,复制到容器内再进行pip安装。

root@48934ea3315e:/app# pip3 install -r ./pip_pakge.txt 

在这里插入图片描述
我的服务器是在国外的所以就没有更新pip源,如果需要国内的pip源,自行搜索更新替换。容器环境中很多工具都没有比如vim,需要自己安装下载,都是是apt-get命令进行安装,想要什么自行安装。

封装自己Jenkins镜像

当上诉环境配置好后,基本没什么大问题了,可以封装一个本地镜像备份,以备不时之需,利用备份镜像可快速恢复上诉的环境(安装有allure,Python,vim等各种工具的环境),利用宿主机挂载的目录数据,可以对数据惊醒快速恢复,封装命令如下:

[root@panzer ~]# docker ps # 查看正在运行的容器,可以查看容器ID
[root@panzer ~]# docker commit 48934ea3315e jenkins_python_allure # 将配置好环境的镜像重新封装备份在本地
[root@panzer ~]# docker images # 查看本地的镜像

过程如下图所示:
在这里插入图片描述
容器环境准备好后就可以在web页面访问Jenkins服务。
注意:以上所有环境对应的端口需要不被占用,防火墙开放,不然web页是无法访问的!!!

访问Jenkins

访问URL:http://宿主机IP:映射的端口
在这里插入图片描述
第一次访问需要到服务器上查看密码,有以下两种方法
1.直接进入容器查看:

root@panzer home]# docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword # 注意修改容器的名字,也就是命令中的Jenkins

在这里插入图片描述
2.通过容器日志进行查看:

[root@panzer home]# docker logs jenkins # 注意修改蓉欧过去名字

在这里插入图片描述
这里配置一下Jenkins的镜像加速,修改为国内的,国外的始终有点问题:
由于做了数据映射,所以只需要修改宿主机/home/jenkins_home/中的hudson.model.UpdateCenter.xml 文件就可以实现。
在这里插入图片描述
将 url 内容修改为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json (清华大学官方镜像)
效果图下图所示:
在这里插入图片描述
配置完成后在wbe访问首页输入密码,进入、安装插件,再进行系统设置就可以构建项目了。

全局工具配置

在Jenkins的web完成。
配置路径:
在这里插入图片描述
配置内容在这里插入图片描述
配置位置:
在这里插入图片描述
配置内容
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置位置:
在这里插入图片描述
配置内容:
在这里插入图片描述
容器内查看JDK方法:

# 容器内执行:echo $JAVA_HOME

在这里插入图片描述

构建工程

接下来就是创建一个项目,并构建了,这个就不细说了,网上帖子很多,自己去了解

git仓库的配置

这里由于没有git用户的密码,所以是用的http的方式连接仓库,不管什么方法,先能拉得过来才是王道。这里注意第一次添加账号密码后可能会出现权限问题,返回一个错误码code:128,我是将添加的账号密码删除后重新添加后就正常了。
在这里插入图片描述

构建步骤

构建步骤就用的简单的shell命令,首先你要了解的项目目录结构,以及Jenkins工作目录结构,如下图,服务器中目录所示:
在这里插入图片描述
在这里插入图片描述
运行构建的时候工作在创建项目目录下面,使用shell命令切换到需要运行的run.py文件目录中,再使用Python命令运行该run.py文件。
在这里插入图片描述

生成报告

看图中解释,和上面的目录结构吧,不多说了。
在这里插入图片描述
在这里插入图片描述

构建结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完结撒花,尼玛这玩意儿写了我一天,要Jenkins发邮件的配置,看我另外一篇帖子,那个是直接部署在宿主机中的Jenkins,但是发邮件的配置都是一样的

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值