Appearance
Docker 搭建 jenkins
以下是配置 Docker Desktop 中的 Jenkins 的步骤:
- 在 Docker Desktop 中启动 Jenkins 的容器。您可以使用以下命令在 Docker 中运行 Jenkins:
docker
docker run -d --name jenkins -p 8080:8080
-v /your/home:/var/your/home
-v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts
其中 -p 参数用于将容器内部的端口映射到本地机器上的端口。
打开浏览器并访问
http://localhost:8080
,以打开 Jenkins 的 Web UI。根据提示完成 Jenkins 的安装向导,包括创建管理员帐户和安装插件等。
将 python 安装在 jenkins 容器下
注意
Jenkins 因为没有 python 的环境,使用不了 python 语言
1、先看你的jenkins是否安装好
在 powershell 中执行以下命令:
docker
docker ps
2、以root权限进入jenkins容器:
docker
docker exec -it -uroot jenkins bash
3、前置安装一些软件包:
apt-get update //获取最新的软件包
apt-get upgrade //升级已安装的软件包
4、 提前安装,以便接下来的配置操作:
apt-get -y install gcc automake autoconf libtool make
apt-get -y install make*
apt-get -y install zlib*
apt-get -y install openssl libssl-dev
apt-get install sudo
安装 python3.10.0
- 下载python
- 进入jenkins的安装目录
cd /var/jenkins_home
- 新建一个python3目录
mkdir python3
- 切换到python3下
mkdir python3
- 下载python的tgz安装包
wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz
- 进行解压python-3.10.0
tar -zxvf Python-3.10.0.tgz
- 将解压的Python-3.8.6复制到py3.8文件中(文件夹太长,不好后面的操作)
mv Python-3.10.0 py3.10
- 切换到py3.10.0下
cd py3.8
- 安装python 即在路径 /var/jenkins_home/python3/py3.10.0下执行python3 的安装
- 指定安装的目录
./configure --prefix=/var/jenkins_home/python3 --with-ssl
- 编译
make
- 安装
make install
- 添加一些软链接:python3 和pip3
ln -s /var/jenkins_home/python3/bin/python3.10.0 /usr/bin/python3
ln -s /var/jenkins_home/python3/bin/pip3 /usr/bin/pip3
ln -s /usr/local/bin/python3.10 /usr/bin/python
- 检查配合的环境 在路径 /var/jenkins_home/python3/bin 或 /usr/bin/ 输入
看python3的版本
python3 -V
看pip3的版本
pip3 -V
Jenkins 中创建拉取 github 项目的任务
新建 Jenkins 的配置任务
配置 git
配置构建触发器(可选)
配置构建脚本
TIP
pip install -r requirements.txt 执行项目根目录中的requirements.txt文件,自动安装项目需要的库,这样就不用担心代码引入了新库,而Jenkins中不存在,导致报错了。
cp …/…/tools.ini $PWD/src/conf 拷贝配置文件。因为gitee托管项目时,没有提交ini带私密信息的配置文件
python main.py 用python执行项目构建
注意
用docker+jenkins来运行selenium的项目,是无图形界面的,所以项目中,浏览器必须采用无头模式
python
# 参考代码
# -*- coding: utf-8 -*-
# @Time : 2022/1/11 13:30
# @Author : Limusen
# @File : demo_ui
from selenium import webdriver
option = webdriver.ChromeOptions()
# 无头模式
option.add_argument('headless')
# 沙盒模式运行
option.add_argument('no-sandbox')
# 大量渲染时候写入/tmp而非/dev/shm
option.add_argument('disable-dev-shm-usage')
# 指定驱动路径
browser = webdriver.Chrome( options=option)
# 访问百度
browser.get('http://www.baidu.com/')
# 打印标题
print(browser.title)
# 关闭浏览器
browser.quit()
重新封装browser_utils.py 优化一下驱动类,在根据不同的环境运行执行不同的driver,并且linux下需要配置无头模式
python
# -*- coding: utf-8 -*-
# @Time : 2022/1/4 19:44
# @Author : Limusen
# @File : browser_utils
# 封装驱动类
import os
import sys
import warnings
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from common.config_utils import local_config
from common.log_utils import logger
current_path = os.path.dirname(os.path.abspath(__file__))
system_driver = sys.platform
class BrowserUtils:
def __init__(self):
# 去除控制台警告
warnings.filterwarnings("ignore", category=DeprecationWarning)
self.driver_name = local_config.driver_name
def get_driver(self):
if self.driver_name.lower() == 'chrome':
logger.info("当前正在打开:%s" % self.driver_name)
return self.__get_chrome_driver()
elif self.driver_name.lower() == 'firefox':
logger.info("当前正在打开:%s" % self.driver_name)
return self.__get_firefox_driver()
elif self.driver_name.lower() == 'edge':
logger.info("当前正在打开:%s" % self.driver_name)
return self.__get_edge_driver()
def __get_chrome_driver(self):
# 先封装简易代码
# 加入系统环境判断
if system_driver.lower() == "darwin":
chrome_options = Options()
chrome_options.add_argument('--disable-gpu') # 谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument('lang=zh_CN.UTF-8') # 设置默认编码为utf-8
chrome_options.add_experimental_option('useAutomationExtension', False) # 取消chrome受自动控制提示
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation']) # 取消chrome受自动控制提示
"""如果是mac系统执行这个驱动"""
chrome_path = os.path.join(current_path, '..','webdriver', 'chrome', 'chromedriver')
driver = webdriver.Chrome(executable_path=chrome_path, options=chrome_options)
return driver
elif system_driver.lower() == "win32":
chrome_options = Options()
chrome_options.add_argument('--disable-gpu') # 谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument('lang=zh_CN.UTF-8') # 设置默认编码为utf-8
chrome_options.add_experimental_option('useAutomationExtension', False) # 取消chrome受自动控制提示
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation']) # 取消chrome受自动控制提示
chrome_path = os.path.join(current_path, '..', 'webdriver', 'chrome', 'chromedriver93.exe')
driver = webdriver.Chrome(executable_path=chrome_path, options=chrome_options)
return driver
elif system_driver.lower() == "linux":
chrome_options = Options()
chrome_options.add_argument('no-sandbox')
chrome_options.add_argument("headless") # => 为Chrome配置无头模式
chrome_options.add_argument('disable-dev-shm-usage')
chrome_options.add_argument('disable-gpu') # 谷歌文档提到需要加上这个属性来规避bug
driver = webdriver.Chrome(options=chrome_options)
return driver
def __get_firefox_driver(self):
if system_driver.lower() == "darwin":
firefox_path = os.path.join(current_path, '..', 'webdriver', 'firefox', 'geckodriver')
driver = webdriver.Firefox(executable_path=firefox_path)
logger.info('初始化Firefox浏览器并启动')
return driver
else:
firefox_path = os.path.join(current_path, '..', 'webdriver', 'firefox', 'geckodriver.exe')
driver = webdriver.Firefox(executable_path=firefox_path)
logger.info('初始化Firefox浏览器并启动')
return driver
def __get_edge_driver(self):
"""
驱动下载地址:https://developer.microsoft.com/zh-cn/microsoft-edge/tools/webdriver/
:return:
"""
edge_path = os.path.join(current_path, '..', 'webdriver', 'edge', 'msedgedriver.exe')
driver = webdriver.Edge(executable_path=edge_path)
logger.info('初始化Edge浏览器并启动')
return driver
if __name__ == '__main__':
driver = BrowserUtils().get_driver()
driver.get("https://www.baidu.com")
print(driver.title)
driver.quit()