Skip to content

IDEA

Docker 搭建 jenkins

以下是配置 Docker Desktop 中的 Jenkins 的步骤:

  1. 在 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 参数用于将容器内部的端口映射到本地机器上的端口。

  1. 打开浏览器并访问 http://localhost:8080,以打开 Jenkins 的 Web UI。

  2. 根据提示完成 Jenkins 的安装向导,包括创建管理员帐户和安装插件等。

将 python 安装在 jenkins 容器下

注意

Jenkins 因为没有 python 的环境,使用不了 python 语言

1、先看你的jenkins是否安装好

docker_01

在 powershell 中执行以下命令:

docker
docker ps

docker_02

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

  1. 下载python
    1. 进入jenkins的安装目录
cd /var/jenkins_home
    1. 新建一个python3目录
mkdir python3
    1. 切换到python3下
mkdir python3
    1. 下载python的tgz安装包
wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz
    1. 进行解压python-3.10.0
tar -zxvf Python-3.10.0.tgz
    1. 将解压的Python-3.8.6复制到py3.8文件中(文件夹太长,不好后面的操作)
mv Python-3.10.0 py3.10
    1. 切换到py3.10.0下
cd py3.8
  1. 安装python 即在路径 /var/jenkins_home/python3/py3.10.0下执行python3 的安装
    1. 指定安装的目录
./configure --prefix=/var/jenkins_home/python3 --with-ssl
    1. 编译
make
    1. 安装
make install
    1. 添加一些软链接: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
    1. 检查配合的环境 在路径 /var/jenkins_home/python3/bin 或 /usr/bin/ 输入
看python3的版本
python3 -V
看pip3的版本
pip3 -V

Jenkins 中创建拉取 github 项目的任务

新建 Jenkins 的配置任务

jenkins_01

jenkins_02

配置 git

jenkins_03

jenkins_04

配置构建触发器(可选)

jenkins_05

配置构建脚本

jenkins_06

TIP

pip install -r requirements.txt 执行项目根目录中的requirements.txt文件,自动安装项目需要的库,这样就不用担心代码引入了新库,而Jenkins中不存在,导致报错了。

cp …/…/tools.ini $PWD/src/conf 拷贝配置文件。因为gitee托管项目时,没有提交ini带私密信息的配置文件

python main.py 用python执行项目构建

jenkins_07

注意

用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()

参考文档