Docker+jenkins+python3環境(超詳細)


 

 

前言:

  自動化寫好后需要在服務器上每日定時運行,遇到這樣的一個問題,Jenkins容器是在docker中安裝的 ,然后從git上拉取代碼 發現代碼在jenkins容器的目錄當中,運行的時候提示沒有安裝python環境的第三方庫。

 

解決方法有3種:

  第一種:啟動jenkins容器時 將容器的目錄掛載到宿主機目錄上去執行(方法不能實現 pass)

  第二種:在jenkins上創建本地節點,將代碼拉取到本地 然后去運行本地項目(在本機上使用比較方便,但是局限性比較小)

  第三種:重新封裝jenkins鏡像,在jenkins鏡像中安裝python3的環境 在容器中執行項目(步驟麻煩,但后續永久使用)

第一種方法和第二種方法都需要在服務器中安裝docker和jenkins鏡像

 

一、安裝docker

  安裝docker https://www.runoob.com/docker/docker-tutorial.html 

  

二、安裝jenkisn鏡像

復制代碼
1.查找docker上的鏡像
    docker search jenkins
  
2.下載自己所需要的鏡像
    docker pull jenkinsci/blueocean
  
3.查看是否下載成功
    docker images
  
4.啟動下載的鏡像
  docker run -d -p 10240:8080 -p 10241:50000 -v /jenkins_autotest/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime  -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai --name jenkint_test jenkinsci/blueocean
 
#說明:docker run    運行
  -d:后台運行容器
  -p:指定容器的端口映射 -p 10240:8080 表示將容器的8080端口映射到宿主機的10240端口上 ,映射多個端口使用 -p 8082:8080 -p 8083:8081 -v:掛載宿主機目錄和 docker容器中的目錄 /Users/songpeilun/jenkins_home 本地宿主機絕對目錄;/var/jenkins_home 容器目錄(將容器目錄掛載到本地) -v:/etc/localtime:/etc/localtime 本地時間和容器時間同步 -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai 設置容器時間為上海時間(不然容器時間和本地時間相差8小時) --name jenkint_test 設置容器的名稱 jenkinsci/blueocean 選擇鏡像名稱啟動容器(默認鏡像后面會加latest 如果拉取自己創建的鏡像后面要加自己的版本號 jenkinsci/blueocean:版本號TAG )
   ⚠️ 容器目錄掛載本地目錄時 一定要給本地文件夾賦予權限  chmod 777 jenkins_home
復制代碼

輸入docker images 查看jenkins鏡像是否安裝成功

1
docker images

 

 

查看容器是否運行

1
docker ps

 可以看出docker中已經有運行的容器jenkins

 

 這樣就說明 已經安裝好jenkins 現在就可以啟動jenkins了

 

三、啟動jenkins

瀏覽器輸入 服務器的ip+端口號  http://47.99.98.XXX:10240/ 如果無法訪問請關閉系統防火牆

 

查看密碼的方式有2種,第一種是在服務器的容器中查看,第二種是在映射本地查看(前提是你映射了本地目錄)

1
2
3
容器中查看密碼:cat  / var / jenkins_home / secrets / initialAdminPassword
映射本地目錄:cat  / Users / songpeilun / jenkins_home / secrets / initialAdminPassword
#/Users/songpeilun/jenkins_home  本地映射目錄地址

好了,到這里就已經安裝好jenkins了

復制代碼
#說一下 容器操作方法
1.進入容器
    docker exec -itu root 容器id /bin/sh

2.根據容器id停止運行的容器
  docker stop 容器id
  
5.啟動停止的容器 
     docker start 容器id

6.刪除容器(只能刪除停用的容器)
    docker rm 容器id
  
7.根據關鍵字查找容器
  docker ps -a |grep jenkins
復制代碼

 

三、方法2:新建本地節點  

  說一下方法2的具體邏輯,主要是新建jenkins的本地節點 利用新的節點將git上的代碼拉取到本地(宿主機)上去執行代碼

  該方法主要適用於 本地已經有一套python3的一套環境,可以直接運行自動化  利用本地持續集成實現每日自動化報告(缺點:因為利用的是本地節點 利用宿主機地址當作ip 所以每次都需要開啟電腦和jenkins地址 且外網不能訪問 局限性小)

 第一步:在jenkins當中安裝SSH Agent插件

  安裝 ssh Agent插件 系統設置—插件管理—可選插件 然后輸入ssh agent 搜索

 

 

 第二步新增節點

 系統設置—節點管理—新建節點(節點名稱不能重復)

 

 

 

 

說明:

  節點名稱:名稱盡量用英文和字符不要用漢字(創建項目的時候選擇節點會有警告!)

  節點描述:可填寫可不填寫

  執行器數量:節點同時運行的數量

  遠程工作目錄:本機的工作目錄(/Users/songpeilun/jenkins)這需要有root權限的用戶對此文件所有權限

  標簽:可填寫可不填寫

  用法:盡可能對使用這個節點

  啟動方式:Launch agents via SSH

  主機:本機的網絡ip地址(網絡-網絡設置-IP)

  Credentials:選擇已添加的本機賬號密碼

  Host Key Verification Strategy:Non verifying Veriflication Strategy

  可用性:盡量保持代理在線

  節點屬性--git:git的安裝路徑

 

 然后啟動節點 下面就表示啟動成功,然后查看本地宿主機 目錄文件夾夾是否有節點的文件

 

 

 

三、方法3:容器中安裝python3環境

  說一下方法3的具體邏輯,主要是在容器中運行代碼,git將代碼默認拉取到容器當中 不需要映射直接在容器中執行代碼(好處:不占用服務器的資源大小,隨時啟動;不需要本地啟動服務 直接利用服務器地址就行 壞處:安裝麻煩一點😈 )

  第一步:需要進入jenkins容器當中  

docker exec -itu root 容器id /bin/sh

 下面有2種方法安裝 python3

  1.weget 安裝(不推薦,基本和現安裝的方法差不多,先要安裝一些依賴包,如 gcc 等)

  2.apk add 安裝(此版本是alpine :apk add,能夠快速安裝完成)

 最后注意系統版本問題:

  如果是 centos 那即是 yum ; 如果是 ubuntu 那即是 apt-get ; 如果是 alpine 那即是 apk

  

  第二步:apk進行安裝python3

cd /etc/apk/
echo "https://mirrors.ustc.edu.cn/alpine/v3.6/main/" > repositories
echo "https://mirrors.ustc.edu.cn/alpine/v3.6/community/" >> repositories

  更新apk源 這樣下載的比較快

apk update

 

   

  第三步:使用apk add 安裝python3環境

apk add python3

 

  第四步:更新pip3

pip3 install --upgrade pip

驗證python環境
python -V
Pip3 -V

 

 上面安裝成功后 就可以安裝第三方庫的插件了,已經完成一半了

 插件安裝 根據自己項目需要安裝 下面就以我的項目為列

  

  第五步:安裝python 三方庫

  首先創建requirements.txt 文件  

  pip freeze > requirements.txt

  pip install -r requirements.txt

 

  然后使用 vi requirements.txt 打開文件進行編輯

復制代碼
復制代碼
        base64-test0926 ==1.0.0
        PyMySQL==1.0.2
        pytest==6.2.3
        python-jenkins==1.7.0
        PyYAML==5.4.1
        redis==3.5.3
        requests==2.25.1
        SQLAlchemy==1.4.10
        xlrd==1.2.0
        urllib3==1.26.4
        wheel==0.36.2
        allure-pytest==2.8.40
        allure-python-commons==2.8.40

最后2個需要將Allure報告配置完成后在進行安裝,不然會報錯
復制代碼

 

復制代碼

⚠️ 如果安裝出錯 不要着急 慢慢找出原因 我之前出錯后 找了半天原因 是因為缺少 greenlet 插件 (后面在為大家 提供方法)

 

   如果沒有問題 到這里就已經安裝成功了,可以將自己的代碼cp 到容器當中 測試一下。沒有問題后就可以打包鏡像了

本地文件拷貝到容器xx目錄當中

docker cp /Users/songpeilun/python_data/allure-2.13.0.zip jenkint_test:/xx目錄

 

  我這里使用了Allure報告 所以要安裝

  第六步:安裝allure報告

  allure是一個解壓包,這里為大家提供一個,下載后拷貝到容器當中 解壓

  鏈接: https://pan.baidu.com/s/1JbBXOfA0j6saZh7H8RMipw  密碼: qfnv

  

復制代碼
#容器中解壓文件
unzip allure-2.13.0.zip

#配置環境變量
vi /etc/profile
PATH后面添加 :$PATH:/allure-2.13.0/bin(allure的全路徑)
source /etc/profile  保存生效
復制代碼

  

  第七步:驗證allure

allure --version

 

四、打包/上傳鏡像

  第一步:直接將安裝好的鏡像進行打包  

復制代碼
docker commit -a "songpeilun" -m "python3.7.9" 7dc75172f62d python3.7.9:spl
-a "songpeilun"        #提交的鏡像作者
-m "python3.7.9"        #提交時的說明文字
7dc75172f62d:CONTAINER ID #容器id
python3.7.9:spl:REPOSITORY:TAG
    
REPOSITORY    # 鏡像倉庫
TAG           # 鏡像標簽
IMAGE ID      # 鏡像ID
CREATED       # 鏡像創建時間
SIZE          # 鏡像大小
復制代碼

 

  

  第二步:將docker上鏡像下載到本地 

    如果要上傳到dockerhub 此步驟可忽略

方法一:docker sava 鏡像id > 本地地址
docker save baf771f9d0be > /Users/songpeilun/python/python3.7.9.tar

方法二:docker save -o 指向本地地址 鏡像REPOSITORY
docker save -o /Users/songpeilun/python/python.tar python3.7.9

 

  第三步:注冊dockerhub 並上傳鏡像

    www.baidu.com

 

  第四步:將容器打包發布到dockerhub

  

復制代碼
#將docker上的容器提交到dockerhub上
#步驟一:登錄docker輸入賬號密碼
docker login

#步驟二:查看本地鏡像 
docker images

#步驟三:更改鏡像名稱(否則會報錯)
docker tag REPOSITORY:TAG EPOSITORY:TAG(新的名稱和版本號)
docker tag python3.7.9:spl songpeilun/python3.7:xxx
    
#步驟四:push鏡像
docker push songpeilun/python3.7:xxx
復制代碼

 

 

 

 

 

 

   第五步:下載打包好的鏡像 使用

  

docker pull 鏡像名稱:TAG

 

 

五、配置jenkins環境

  配置python3+allure+jenkins自動化環境

  第一步:創建項目

 

 第二步:拉取git代碼

  使用ssh拉取

git@github.com:XXX/zh-cnProject.git

 添加Credentials git的賬號密碼和 key

 

本地git的key 不帶pub的

 

 

 第三步:構建后生成allure報告

 

 

六、踩坑 

 問題一:鏡像當中確少greenlet 插件

  先查看python3 pip3的安裝路徑是否有greenlet文件目錄 在命令行輸入:pip-V

  

 

   然后進入/usr/lib/python3.6/site-packages 文件夾,這里面都是python3所需要的環境,把這兩個文件放進去(從宿主機拷貝到容器的這個目錄當中)

  鏈接: https://pan.baidu.com/share/init?surl=2lhmetAT9OFuMmduR9VSrA 密碼:tvrb

  拷貝完之后輸入pip3 list 查看是不是已經有該插件了,然后在去執行剛剛安裝報錯的插件 使用pip3 install 庫名稱

 

 問題二:提示找不到文件 command not found

  本地節點jenkins運行后提示沒有pytest命令,但是本地運行卻沒有問題?

 

 

 jenkins找不到pytest運行程序 可以將代碼里面把pytest運行環境寫成本地的環境去運行 也可以在shell里面寫如本地環境 使用絕對路徑去運行

 

 

 問題三:github拉取代碼失敗

  賬號和密碼正確,ssh密匙沒有問題 第一次拉取成功,后面拉取一直失敗

  連接github的時候選擇的是ssh 但是在配置url連接的時候選擇的是https所有會導致失敗 使用ssh拉取代碼顯示成功git@github.com:XXX/zh-cnProject.git 格式類型一定要相對應

 

 

 

 問題四:新建節點拷貝路徑一直提示失敗

  

 

 新建節點拷貝到本地路徑 但是當前文件夾沒有權限 需要用root權限去拷貝執行 可以先測試創建一個文件去嘗試

 

問題五:jenkins時間與本地時間不一致

  如果按照我上面的命令執行 是不會出現時間不一致的問題,因為我已經加上了時間命令 啟動docker鏡像時

 -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai     設置容器時間為上海時間(不然容器時間和本地時間相差8小時)

jenkins系統設置可以查看修改后的時間格式

 

 

到這里已經完成了,有什么問題可以直接在下面評論 很高興為大家服務,一個萌新測試小白


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM