docker搭建svn伺服器
① 做軟體測試都需要學什麼呢
蝸牛學院這里根據行業變化和企業用人需求整理了一份Python軟體測試學習路線,主要學習以下內容,題主可以了解一下~
第一階段:專業基礎課程
階段目標:
1. 熟練掌握IT核心技術:編程,資料庫,操作系統,版本控制
2. 能夠熟練運用所學技術搭建各類伺服器環境
3. 深入理解軟體研發過程各種疑難雜症及處理手段
4. 掌握Python編程技術並熟練運用Python進行程序設計
知識點:
1、Web頁面元素,布局,CSS樣式,盒模型,javaScript程序設計,函數,基礎演算法,正則表達式。
2、資料庫知識,範式,Mysql配置,命令,建庫建表,數據的增刪改查,約束,視圖,存儲過程,函數,觸發器,事務,游標,建模工具深入理解資料庫管理系統通用知識及MySQL資料庫的使用與管理。為軟體測試和測試開發打下基礎。
3、linux安裝配置,文件目錄操作,VI命令,管理,用戶與許可權,環境部署,Shell編程Linux作為一個主流的伺服器操作系統,是每一個測試開發工程師必須掌握的重點技術,並且能夠熟練運用。
4、Python編程基礎,語法規則,函數,數據類型,PDBC,培養扎實的Python編程基本功,同時對Python核心對象編程有熟練的運用。
5、Python面向對象,異常處理,文件IO,多線程,網路編程,PyQT界面開發,深入理解面向對象編程,異常處理機制,多線程原理,網路協議知識,並熟練運用於項目中。
第二階段:專業核心課程
階段目標:
1. 熟練應用所學知識完成一個標準的軟體測試項目
2. 熟練運用Python完成GUI測試,介面測試和性能測試開發
3. 對測試開發技術體系和實現原理有深入的理解
4. 靈活運用測試開發技術解決項目中的各種問題
知識點:
1、軟體工程,軟體質量,系統測試流程,方法,專業術語,測試用例設計,禪道管理工具,測試報告,缺陷管理理解軟體工程的各類實際問題,理解系統測試的理論、方法與過程,熟練運用測試用例設計方法高效設計測試用例。
2、測試需求分析,測試方案設計,測試用例設計,測試項目實施,缺陷報告與測試報告,深入理解系統測試各個過程和關鍵環節,熟練完成系統測試項目。
3、SikuliX框架,UIAutomation框架,Selenium WebDriver框架,基礎框架,Android應用,Monkey測試,Appium移動端測試框架,UIAutomator2移動端測試框架綜合運用各類應用操作平台,完成各種自動化測試框架的學習和應用,深入理解GUI自動化測試技術及相應框架的測試開發。
4、Python單元測試框架,網路通信協議,HTTP與HTTPS協議,WebService與WebSocket協議,Python的介面測試庫,PostMan與SoapUI介面測試工具通過對代碼級介面測試和協議級介面測試的測試開發實戰,靈活運用Python開發介面測試腳本,熟練運用各類介面測試工具。
5、性能測試原理,指標體系,場景設計,實施過程,JMeter工具應用,BeanShell腳本開發,Python+Locust性能測試框架深入理解性能測試技術體系和方法論,熟練運用JMeter性能測試工具和Locust性能測試框架實施對任意系統的性能測試。
第三階段:綜合實戰項目
階段目標:
1. 將軟體測試和測試開發技術靈活運用於項目中
2. 具備較強的測試開發能力,獨立完成測試開發項目
3. 綜合運用軟體測試技術,滿足企業中高級人才需求
4. 對所學技術有深入的理解並具備獨立解決問題的能力
知識點:
1、測試需求分析,同行評審,測試計劃,測試方案,測試用例,配置管理,持續集成。通過對大型企業級應用系統的測試項目實戰,強化理解系統測試項目的實施過程與技術細節。
2、介面測試設計與實施,回歸測試,冒煙測試,安全性測試,RobotFramework框架應用,UI自動化實戰將各類自動化測試技術結合項目實戰演練,強化對自動化測試技術的運用,同時掌握更多的測試框架。
3、性能測試項目實戰,LoadRunner性能測試工具,總結通過綜合項目實戰,將全套測試技術融入到項目中,強化學習效果和項目經驗。
4、Python原生測試框架開發,包括Monkey,UI,圖像識別,雲測試平台,HTML測試報告,持續集成,KDT關鍵字驅動框架開發等原生技術實現通過大量的Python原生代碼開發,深入理解自動化測試開發技術的底層實現原理,完全拋棄對工具的依賴,做到真正的測試開發技術。
5、基於測試框架的設計思路和實現手段,自主實現一套測試框架能夠獨立完成一套自動化測試框架,並能夠直接用於實際項目中。
6、持續集成與Jenkins,安全性測試原理與工具,Python爬蟲開發與Scrapy框架,提升軟體測試其它類技術,增強知識面,提升競爭力,助力職業發展。
補充知識
2、UML統一建模語言、五種圖、類圖、類圖詳解、用例圖、時序圖。
3、Dubbo分布式開發框架,Oracle關系型資料庫管理系統,MongoDB非關系型資料庫管理系統。
4、大數據開發框架Hadoop/MapRece/Spark。
5、Android與iOS的原生應用開發與WebApp開發。
6、OpenCV圖像處理框架、TensorFlow深度學習框架,Lucene全文搜索引擎與中文分詞框架Ik-Analyzer,視頻處理演算法與框架等。
② Docker 和docker hub的思想是不是和SVN挺像的
其實流程上可以這樣類比的,區別在於docker鏡像是由只讀層堆疊的,自己和他人無法修改,只能重構。另外,docker hub是公開的,全世界的人都可以從上面pull想要的鏡像,你也可以搭建自己的私有倉庫,來存放自己構建的鏡像。有什麼問題咱們可以討論!
③ GitLab搭建個人(或公司)版本控制系統
說明:Git,Github,GitLab三者關系。
Git - 是一款自由和開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的項目。是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟體。(svn是集中化的版本控制系統)。
GitHub - 是一個面向開源及私有軟體項目的託管平台(也就一個網站),提供給用戶空間創建git倉儲,保存用戶的一些數據文檔或者代碼等。它可以託管各種git庫,並提供一個web界面。被戲稱為「全世界最大的同性交流社區」。
GitLab - 基於Git的項目管理軟體。使用Git作為代碼管理工具,並在此基礎上搭建起來的web服務。
當然啦國內開源中國出的「碼雲」,第一次聽得人還以為是「馬雲」。我醬紫。它跟Github功能差不多,都能建立公有和私有的倉庫。不過嘛感覺有點封閉,社區沒有Github熱鬧。
有的人就說啦,我完全可以在Github或者GitLab上做遠端代碼倉庫,為啥還要倒騰GitLab自建代碼託管系統?就一個字: 「代碼安全性」(公司保密規定)。 對於公司來說,GitLab讓開發團隊對他們的代碼倉庫擁有更多的控制,相比於GitHub,它有不少的特色:
一、自建代碼託管系統都需要做些什麼工作?
1. 選擇開源軟體
Git 大家族的 GitLab ,它提供了完善的用戶許可權管理,除了涵蓋 Git 所有的功能,同時又提供方便的後台管理。分別有CE(社區版)、EE(企業版)、OM(RPM 包完整版)三個版本,目前市面上開發者們的普遍選擇是使用 CE 版的源碼,成本較低且相對方便。
2. 硬體設施方面
如果是對於中小型企業來講,自建機房一般成本較高,所以除非是大型集團企業。現在市面上存在太多的雲伺服器廠商,平均價格多在 5000元/年以上,都是不錯的選擇。
可能遇到的坑:
3.由於個人眼界以及信息不對稱,目前大部分公司都是在公司區域網內自行用GitLab搭建代碼託管系統。部署Gitlab 是對伺服器有配置要求的建議是CPU兩核,內存4G以上。個人經驗,勿噴啦。
二、搭建過程(這里僅是作者接觸的,其實還有很多更高級的盤法)
Gitlab的服務構成
1.搭建方法分為:傳統方式安裝GitLab和Docker安裝(推薦)。
2.傳統安裝過程(平台使用centos7安裝)
安裝和配置必要的依賴項:
安裝Postfix以發送通知郵件:
在安裝Postfix期間,可能會出現配置屏幕。選擇「Internet Site」並按enter鍵。使用您的伺服器的外部DNS以「mail name」並按enter。如果出現額外的屏幕,繼續按enter鍵接受默認值。
添加GitLab鏡像源並安裝gitlab伺服器:
注意這里設置的埠不能被佔用,默認是8080埠,如果8080已經使用,請自定義其它埠,並在防火牆設置開放相對應得埠。
重置並啟動GitLab:
訪問 GitLab頁面:如果沒有域名,直接輸入伺服器ip和指定埠進行訪問
獲取/修改超級管理員root的密碼:
最後我們使用默認的賬號:root 和剛剛設置好的密碼12345678進行登錄。
後面的步驟配置SSH key,git Bash的global config等初始化設置跟GitHub一樣。可是還有一點就是「漢化」。(英文不好的小夥伴)但是有一定風險,後面我打開報502錯誤。有兩種方法:用git比對出英文與中文的補丁,將英文打補丁。第二是直接下載中文版,替換英文。
3.Docker安裝(推薦)
(1)配置docker鏡像
直接從 docker hub 獲取的話速度非常慢,所以需要配置一個鏡像。我使用的是 cloud.io提供的加速器,速度很快。
(2)獲取 GitLab 鏡像
下載完成後,查看鏡像列表
(3)啟動容器
3個--publish指定容器與主機的埠映射,分別是 http、https、ssh
3個--volume指定數據卷的映射,分別是 gitlab 的 配置、日誌、數據
(4)配置外部訪問 URL
修改 gitlab 配置文件:
找到 external_url 這一項修改為自己伺服器的訪問地址:
保存後,重啟容器
(5)訪問
初次訪問時,gitlab 要求我們重置管理員密碼,修改完成後登錄。默認用戶root。
當然以上為個人實驗,公司裡面大部分為CTO等大佬已經搭建完畢,我們主要是折騰。
最後推薦個人用很順手的工具: SourceTree (可視化界面的Git),當然啦要想成為大牛或者裝13也好,還是從Git Bash里敲命令行。
④ 新手入門Linux的步驟
很多Linux初學者不知從何處開始學起,怎麼學,感覺很茫然。Linux菜鳥要成為Linux高手,要有一個好的學習計劃和規劃,參加正規培訓班,要不然時間花了很多,卻沒有效果。這里介紹學習Linux的步驟和建議,也可以咨詢老男孩教育,希望對初學者有幫助。
准備階段:(1)了解Linux是什麼,有什麼優缺點,發展歷史和現狀,應用領域;(2)趕快找一部計算機,趕快安裝一個 Linux 發行版本,要自己親手安裝一遍Linux操作系統(包括虛擬機的Linux環境和完整真實的Linux環境);(3)熟悉Linux環境和Linux基本操作
菜鳥階段之選教程:選擇一本好的工具書工具書對於學習者而言是相當重要的。如:跟老男孩學Linux運維,linux就該這樣學等。
菜鳥階段之系統命令:Linux命令是必須好好學習和經常使用,而不要經常去使用菜單操作。一定要養成在命令行下工作的習慣
中級階段之命令行習慣:養成在命令行下工作:一定要養成在命令行下工作的習慣,要不然沒法成為高手
中級階段之Linux系統結構理解、語言編程與英語:C語言、C++,QT,shell,makefile,java,vi編輯器使用。這些至少要精通一兩門編程語言吧
高級階段之網路編程:Linux是網路的代名詞,Linux網路服務功能非常強大,不論是郵件伺服器、Web伺服器、DNS伺服器等都非常完善。要增加自己Linux 的技能,只有通過實踐來實現了。所以學習Linux也一樣,如果你無法經常學習的話,學了後面的,前面的忘了。你對Linux命令熟悉後你可以開始搭建一個小的Linux網路,這是最好的實踐方法。 當然你不需搭建所有服務,可以慢慢來。需要說明的是這個Linux網路對於初學者有兩三台計算機即可。學好了學好學精了Linux的網路編程,可以肯定的告訴你,你已經是一個非常優秀的Linux人才或者「Linux高手」了
高級階段之嵌入式編程、底層驅動編程與內核源碼:成為Linux高手的重要的方向
⑤ 求java學習路線圖
/*回答內容很長,能看完的少走一個月彎路,絕不抖機靈*/
提前預警:本文適合Java新手閱讀(老手可在評論區給下建議),希望大家看完能有所收獲。
廢話不多少了,先了解一下Java零基礎入門學習路線:
第一階段:JavaSE階段
變數、數據類型、運算符
二進制和十進制的轉化
注釋、單行注釋、多行注釋、文本注釋、注釋內容和位元組碼的關系
標識符、關鍵字、駝峰原則
變數的本質、內存畫圖、變數聲明和初始化
變數的分類和作用域(局部變數、成員變數、靜態變數)
常量和Final
基本數據類型介紹
整型變數和整型常量
浮點類型、float、double
char字元型、轉義字元
boolean布爾型、if語句使用要點、布爾類型佔用空間問題
運算符介紹
算數運算符(二元、自增、自減)
賦值和賦值運算符
關系運算符詳解
邏輯運算符、短路運算符詳解
位運算符詳解
字元串連接符
條件運算符(三元運算符)
運算符優先順序問題
自動類型轉換詳解
強制類型裝換詳解
基本數據類型裝換常見錯誤、溢出、L問題
使用Scanner獲取鍵盤輸入
控制語句
控制語句和實現邏輯對應
if單選結構
if_elseif_else多選結構
switch語句_IDEA更換主題
循環_while
循環_for循環_dowhile
嵌套循環
break和continue語句_標簽_控制語句底層原理
寫一個年薪計算機_網路查問題的秘訣(重要)
個人所得稅計算器軟體
方法核心詳解_天才思維模型教你高手學習思維模式
方法的重載
遞歸結構講解_遞歸頭_遞歸體
面向對象編程-基礎
面向過程和面向對象的區別
類和對象的概述
類的屬性和方法
創建對象內存分析
構造方法(Construtor)及重載
對象類型的參數傳遞
this關鍵字
static關鍵字詳解
局部代碼塊、構造代碼塊和靜態代碼塊
package和import詳解
JavaDoc生成API文檔
面向對象編程-進階
面向對象的三大特性
面向對象之【封裝(Encapsulation)】
訪問許可權修飾符
面向對象之【繼承(Inheritance)】
Object類
方法重寫Override
super關鍵字詳解
重寫equals()和toString()
繼承中對象創建的內存分析
面向對象之【多態(Polymorphism)】
向上轉型
向下轉型
instanceof運算符
編譯時和運行時詳解
final修飾符
抽象類和抽象方法(abstrct)
介面的定義和實現
JDK8的介面新特性
介面應用:內部類比較器Comparable
內部類詳解
Java的內存管理與垃圾回收
異常機制
異常的概述
異常的執行過程與分析
try-catch-finally捕捉異常
throw拋出異常
throws聲明異常
異常繼承體系
運行時異常和編譯異常
自定義異常
Java常用類
Wrapper包裝類
自動裝箱和自動拆箱
包裝類的源碼分析
String類的使用與內存原理
String類的源碼分析
StringBuffer
StringBuilder
字元串處理類性能分析
Date類
System類
DateFormat類
Calendat類
Math類
BigInteger類和BigDecimal類
Random類
枚舉類
File類
常見的面試題講述與分析
數據結構的概述
線性表
順序表
鏈表
棧和隊列
樹
二叉樹
二叉查找樹
二叉平衡樹
黑紅樹
圖
冒泡排序
選擇排序
遞歸
折半查找
集合和數組的聯系和區別
集合框架體系
ArrayList的使用和源碼分析
集合中使用泛型
LinkedList的使用和源碼分析
HashSet的使用和源碼分析
哈希表及原理
TreeSet的使用和源碼分析
比較器Comparable和Comparator
HashMap的使用和源碼分析
TreeMap的使用和源碼分析
Iterator於ListIterator
Collections工具類
舊集合類Vector、Hashtable
集合總結和選擇依據
泛型介面
泛型類
泛型方法
IO流的概念
IO流的分類及其原理分析
文件流FlieInputStream、FileOutputStream
緩沖流BufferedInputStream、BufferedOutputStream
數據流ObjectInputStream、ObjectOutputStream
序列化和反序列化
轉換流InputStreamReader、OutputStreamWriter
列印流PrintWrite和PrintStream
數組流ByteArrayOutputStream、ByteArrayInputStream
使用IO復制文件夾
進程和線程
線程的創建與啟動
創建線程的三種方式對比
線程的生命周期
線程式控制制
多線程的安全問題與解決辦法
線程的同步:同步代碼塊
線程的同步:同步方法
線程的同步:Lock鎖
線程的死鎖問題
線程通信
Condition
線程的完整生命周期
線程池ThreadPoolExecutor
ForkJoin框架
ThreadLocal類
計算機網路基礎知識
網路通信協議
OSI參考模型
TCP/IP參考模型
數據的封裝與拆封原理解析
TCP協議
UDP協議
IP地址和埠號
URL和Socket
使用TCP編程實現登錄功能
使用UDP編程實現客服系統
使用TCP編程實現文件上傳
手寫ArrayList
手寫單鏈表
手寫Linkedlist
手寫HashMap
手寫HashSet
最新並發集合類
生產者消費者模式擴展
Lock鎖和Condition
ReadWriteLock
BlockingQueue
volatile關鍵字
多線程題目練習
JDK新特徵
面試題詳解
設計模式入門
面向對象設計七大原則
簡單工廠模式
工廠方法模式
單例模式
原型模式
裝飾模式
適配器模式
外觀模式
數據結構演算法
集合(容器)
IO流
多線程
網路編程
集合提升尋訓練
多線程提升訓練
設計模式
第二階段:資料庫
資料庫基礎知識
MySQL基礎知識
MySQL8新特徵
安裝和卸載MySQL8
使用navicat訪問資料庫
SQL語言入門
創建資料庫表
DML
修改刪除資料庫表
表的完整性約束
表的外鍵約束
DML擴展
基本select查詢
where子句
函數
group by
having
SQL99-內連接查詢
SQL99-外連接查詢
SQL99-自連接查詢
SQL92-連接查詢
不相關子查詢
相關子查詢
分頁查詢
索引
事務及其特徵
事務的並發問題
事務的隔離級別
存儲過程
導入導出數據
JDBC概述
使用JDBC完成添加/更新/刪除操作
使用JDBC完成查詢操作
JDBC常用介面
使用PreparedStatement
使用事務完成銀行轉賬
提取DBUtil工具類
使用Properties讀寫屬性文件
日誌框架log4j
開發員工管理系統
MySQL基礎
MySQL 查詢語句
資料庫對象
JDBC
第三階段:JavaEE階段
web開發概述
B/S和C/S架構簡介
HTTP協議
HTTP請求頭和響應頭
Tomcat安裝使用
Tomcat目錄結構
Servlet概述
Servlet快速入門
Servlet生命周期
讀取配置文件信息
HttpServletRequest
HttpServletResponse
GET和POST區別
解決中文亂碼
請求轉發與重定向
絕對路徑和相對路徑
Cookie
Session
ServletContext
ServletConfig
JSP技術介紹
JSP的執行過程
scriptlet
表達式
聲明
JSP指令元素
JSP動作元素
JSP隱式對象
JSP底層原理
九大內置對象
四個作用域
Servlet和JSP的關系和區別
MVC模式
合並Servlet
JavaScript概述與特點
JS基礎語法
函數
數組
Math對象
String對象
Date對象
事件event
瀏覽器開發者工具
console
DOM和BOM
window
location
navigator
history
認識DOM
DOM獲取元素
jQuery簡介及快速入門
jQuery入口函數
jQuery對象與DOM對象互相轉換
基本選擇器
屬性選擇器
位置選擇器
表單選擇器
內容選擇器
jQuery事件
jQuery動畫效果
DOM操作-操作文本
DOM操作-操作屬性
DOM操作-操作元素
直接操作CSS樣式
操作CSS類樣式
購物車案例
表單驗證
正則表達式
EL介紹及使用
EL取值原理
EL隱含對象
EL邏輯運算
JSTL介紹-核心標簽庫
JSTL核心標簽庫
JSTL-格式標簽庫
Filter原理
Filter生命周期
Filter鏈
Filter登錄驗證
Filter許可權控制
Listener概述及分類
Listener監聽在線用戶
Ajax非同步請求和局部刷新的原理
使用原生Ajax驗證用戶唯一性
jQuery Ajax
JSON的格式和使用
主要JSON解析器
Jackson的使用
Jackson的實現原理
使用jQuery Ajax實現三級聯動
使用jQuery Ajax實現自動補全
分頁的意義
理解分頁工具類
實現基本分頁
實現帶查詢的分頁
文件上傳原理
文件上傳API
實現文件上傳
文件下載原理
文件下載響應頭
實現文件下載
Servlet
JSP
JavaScript
jQuery
EL+JSTL+過濾器+監聽器
Ajax和JSON
分頁和文件上傳/下載
第四階段:框架階段
MyBatis概述
MyBatis入門配置
基本的CRUD操作
核心配置文件詳解
Mapper.xml基礎詳解
模糊查詢
分頁的實現及插件PageHelper的使用
動態sql+sql片段的使用
一對多、多對一的關系處理
註解的使用
一級緩存和二級緩存說明及使用
generator逆向工程使用
Spring框架簡介
Spring官方壓縮包目錄介紹
Spring環境搭建
IoC/DI容器詳解
Spring創建Bean的三種方式
scope屬性講解
Spring中幾種注入方式
靜態代理設計模式
動態代理設計模式
AOP詳解
AOP中幾種通知類型
AOP兩種實現方式
自動注入
聲明式事務
事務傳播行為
事務隔離級別
只讀事務
事務回滾
基於註解式配置
常用註解
Spring 整合MyBatis
i18n
Spring整合Junit
MVC架構模式
手寫MVC框架
SpringMVC簡介
SpringMVC運行原理
基於配置文件方式搭建環境
基於註解方式搭建環境
SpringMVC的跳轉及視圖解析器的配置
SpringMVC和Ajax的交互
Spring 參數注入
SpringMVC作用域傳值
視圖解析器
文件下載
文件上傳
Spring攔截器/攔截器棧
登錄狀態驗證
SpringMVC容器和Spring容器介紹
異常處理4種方式
SpringMVC5其他常用註解
Maven簡介
Maven原理
Linux安裝及注意事項
Maven項目結構
POM模型
Maven 中項目類型
創建WAR類型的Maven項目
scope屬性可取值
SSM項目拆分演示
Maven的常見插件講解
熱部署
BootStrap概述
BootStrap柵格系統
BootStrap常用全局CSS樣式
常用組件
常用JavaScript插件
RBAC概述
RBAC發展歷史
基於RBAC的資料庫表設計
URL攔截實現
動態菜單實現
密碼學
MyBatis
Spring
SpringMVC
Maven
BootStrap
RBAC
第五階段:前後端分離階段
Spring Boot簡介
Spring Boot實現Spring MVC
配置文件順序及類型講解
Spring Boot項目結構
Spring Boot 整合MyBatis
Spring Boot 整合Druid
Spring Boot 整合PageHelper
Spring Boot 整合logback
Spring Boot 整合JSP
Spring Boot 整合Thymeleaf
Spring Boot 開發者工具
Spring Boot 異常顯示頁面
Spring Boot 整合Junit4
Spring Boot 項目打包部署
Spring Boot 整合Quartz
Spring Boot 中Interceptor使用
Spring Boot Actuator
HikariCP
Logback簡介
Logback依賴說明
Logback 配置文件講解
Logback 控制台輸出
Logback 文件輸出
Logback 資料庫輸出
Spring Security簡介
Spring Security架構原理
什麼是認證和授權
基礎環境搭建
自定義認證流程
UserDetailsService和UserDetails
PasswordEncoder
自定義認證結果
授權-訪問路徑匹配方式
授權-許可權管理
基於註解實現許可權管理
Thymeleaf整合Security許可權管理
Rememberme 實現
退出實現
CSRF
Linux簡介
VMWare安裝及使用
Linux安裝及注意事項
Linux目錄結構及路徑
Linux常用命令
VMWare常用配置
XShell安裝及使用
Xftp安裝及使用
JDK解壓版配置步驟
Tomcat配置步驟
安裝MySQL
WAR包部署
Docker簡介
Docker與VM對比
Docker特點
Docker架構
Docker安裝與啟動
鏡像加速器配置
Docker鏡像操作常用命令
Docker容器操作常用命令
DockerFile
搭建本地鏡像倉庫
推送鏡像到阿里雲及本地倉庫
Docker容器生命周期
Docker數據管理
Redis簡介
Redis 單機版安裝
Redis 數據類型介紹
Redis 常用命令
Redis 持久化方案
Redis 的主從搭建
Redis的哨兵搭建
Redis 的集群搭建
Spring Boot整合Spring Data Redis
Redis的緩存穿透
Redis的緩存雪崩
Redis的緩存擊穿
vsCode和插件安裝
webpack介紹
Vue項目創建
Vue模板語法
Vue條件渲染
Vue列表渲染
Vue事件處理
Vue計算屬性
Vue Class與Style
Vue表單處理
Vue組件
Vue組件生命周期
Vue 路由配置
Vue Axios網路請求
Vue跨域處理
Vue Element
Mock.js
Swagger2簡介
Springfox
Swagger2基本用法
Swagger-UI用法
Swagger2配置
Swagger2常用配置
Git的下載和安裝
Git和SVN對比
Git創建版本庫
Git版本控制
Git遠程倉庫
Git分支管理
Git標簽管理
GitEE建庫
GitEE 連接及使用
GitEE 組員及管理員配置
Spring Boot
Logback
Spring Security
Linux - CentOS 8
Docker
Redis
Vue
Swagger
Git/GitEE
第六階段:微服務架構
分布式文件系統概述
FastDFS簡介
FastDFS架構
Tracker Server
Storage Server
FastDFS安裝
安裝帶有FastDFS模塊的Nginx
Fastdfs-java-client的使用
創建Fastdfs-java-client工具類
實現文件上傳與下載
KindEditor介紹
通過KindEditor實現文件上傳並回顯
AMQP簡介
RabbitMQ簡介
安裝Erlang
安裝RabbitMQ
RabbitMQ原理
Spring Boot 集成RabbitMQ
RabbitMQ的交換器
Spring AMQP的使用
Eureka簡介
Eureka和Zookeeper 對比
搭建Eureka注冊中心
Eureka 服務管理平台介紹
搭建高可用集群
集群原理
Eureka優雅停服
Ribbon簡介
集中式與進程內負載均衡區別
Ribbon常見的負載均衡策略
Ribbon的點對點直連
Feign簡介
Feign的請求參數處理
Feign的性能優化
配置Feign負載均衡請求超時時間
Hystrix簡介
服務降級
服務熔斷
請求緩存
Feign的雪崩處理
可視化的數據監控Hystrix-dashboard
Spring Cloud Gateway簡介
Gateway基於配置文件實現路由功能
Gateway基於配置類實現路由功能
Gateway中內置過濾器的使用
Gateway中自定義GatewayFilter過濾器的使用
Gateway中自定義GlobalFilter過濾器的使用
Gateway中使用過濾器實現鑒權
Gateway結合Hystrix實現熔斷功能
什麼是分布式配置中心
創建配置中心服務端
創建配置中心客戶端
基於Gitee存儲配置文件
基於分布式配置中心實現熱刷新
什麼是消息匯流排
基於消息匯流排實現全局熱刷新
ElasticSearch介紹
ElasticSearch單機版安裝
ElasticSearch集群版安裝
ElasticSearch索引管理
ElasticSearch文檔管理
ElasticSearch文檔搜索
SpringDataElasticSearch訪問ElasticSearch
LogStash介紹
基於LogStash收集系統日誌
分布式事務簡介
分布式事務兩大理論依據
分布式事務常見解決方案
LCN簡介
TX-LCN的3種模式
LCN原理
LCN環境搭建及Demo演示
Nginx的簡介
什麼是正向代理、反向代理
Nginx的安裝
Nginx配置虛擬主機
Nginx配置服務的反向代理
Nginx的負載均衡配置
Spring Session介紹
通過Spring Session共享session中的數據
通過Spring Session同步自定義對象
Spring Session的Redis存儲結構
設置Session失效時間
Spring Session序列化器
MyBatis Plus簡介
Spring整合MyBatis Plus
MyBatis Plus的全局策略配置
MyBatis 的主鍵生成策略
MyBatis Plus的CRUD操作
條件構造器EntityWrapper講解
MyBatis Plus的分頁插件配置
MyBatis Plus的分頁查詢
MyBatis Plus的其他插件講解
MyBatis Plus的代碼生成器講解
MyBatis Plus的公共欄位自動填充
簡介
資料庫切分方式
基本概念
MySQL主從配置
切片規則
讀寫分離
實現分庫分表
FastDFS
RabbitMQ
Spring Cloud Netflix Eureka
Spring Cloud Netflix Ribbon
Spring Cloud OpenFeign
Spring Cloud Netflix Hystrix
Spring Cloud Gateway
Spring Cloud Config
Spring Cloud Bus
ELK
TX-LCN
Nginx
Spring Session
MyBatis Plus
ShardingSphere
第七階段:雲服務階段
Kafka簡介
Kafka架構
分區和日誌
Kafka單機安裝
Kafka集群配置
自定義分區
自動控制
Spring for Apache Kafka
Zookeeper簡介和安裝
Zookeeper 數據模型
Zookeeper 單機版安裝
Zookeeper常見命令
ZClient操作Zookeeper
Zookeeper 集群版安裝
Zookeeper 客戶端常用命令
Zookeeper分布式鎖
什麼是分布式架構
什麼是RFC、RPC
HttpClient實現RPC
RestTemplate
RMI實現RPC
基於Zookeeper實現RPC 遠程過程調用
SOA架構介紹
Dubbo簡介
Dubbo結構圖
Dubbo注冊中心
Dubbo 支持的協議
Dubbo 注冊中心搭建
Spring Boot 整合 Dubbo
Admin管理界面
Dubbo 搭建高可用集群
Dubbo 負載均衡
Spring Cloud Alibaba Dubbo簡介
基於Zookeeper發布服務
基於Zookeeper訂閱服務
實現遠程服務調用處理
Spring Cloud Alibaba Nacos簡介
搭建Nacos伺服器
基於Nacos發布|訂閱服務
實現遠程服務調用處理
Nacos Config配置中心
Spring Cloud Alibaba Sentinel簡介
搭建Sentinel伺服器
Sentinel-實時監控
Sentinel-簇點鏈路
Sentinel-授權規則
Sentinel-系統規則
@SentinelResource註解
持久化規則
Spring Cloud Alibaba Seata簡介
搭建Seata伺服器
Seata支持的事務模式-AT模式
Seata支持的事務模式-TCC模式
Seata支持的事務模式-Saga模式
Seata支持的事務模式-XA模式
SeataAT事務模式應用方式
SeataTCC事務模式應用方式
Kafka
Zookeeper
RPC
Dubbo
Spring Cloud Alibaba Dubbo
Spring Cloud Alibaba Nacos
Spring Cloud Alibaba Sentinel
Spring Cloud Alibaba Seata
⑥ 群暉7.0和6.2區別
群暉 Nas 7.0 已經發布了,最近又更新到 7.1 了。
這里主要想說明一些使用細節上的區別,慢慢總結,慢慢更新,群暉7.0使用了新的UI,肯定有它的方便和易用之處,但也有一些缺點,也希望大家在評論區吐槽一下自己不太習慣或反人類的地方。
二、DSM6.0 SSH支持的一些命令 在DSM7.0 已經不再支持或改由其它命令替代
由於dsm7.0 的命令有變化,早期dsm6.0的命令 syno_poweroff_task 等命令 已不再支持
我找到所有官網的文章,找到類似的命令:
/usr/syno/bin/synopkg onoffall stop
三、DSM7.0 將Photo Station和 Moments 合並為 Synology Photos
在 DSM 7.0 中 Synology Photos 替代了之前的 Photo Station和 Moments,在升級之後原有的兩個套件會消失,並變為 Synology Photos,如果你之前存有不少照片,那之前的個人照片和共享照片也會遷移到 Synology Photos中存儲,更新後,手機端也需要安裝移動端對應的 Synology Photos。之前 6.2 版本的 DS Photo 和 Moments App 不能在 DSM 7.0 中使用!
不過有貼吧網友 天草緋鞠(原文)試過:手機版synology photo不支援gif即時顯示 ,而網頁版支持,手機版synology photo查看圖片後,返回像簿清單會頻繁重載,導致app卡到閃退 (不知道正式版有否解決掉)手機版synology photo若圖片(4~8k)很多張,快取縮圖跑完app也會異常卡頓,synology photos依然不能像video station指定索引路徑,Video station網頁軟解1080P或4K影片CPU異常之高(MKV HEVC很明顯),docker目前用起來正常,跑gitlab與彩虹小馬積分正常,DSfile依然不能在空白處右鍵新增記事本,手機上傳選圖時gif會動,但是傳後不點進去看大圖不會動。上傳影片至synology photos後 用網頁可以直接線上看(上傳會過濾掉不支援的格式提示失敗) 用app只能用第三方播放器且畫質極差且不順 有設畫質優先依然很糟,原因不明,但是用手機從synology photos下載在播放則正常 可能也是bug。
使用synology photos網頁上傳照片有BUG(?),照片會同時存在"home/Photos"與"homes/賬號"底下,容量會累加 (有網友解答:實際上homes才是實際路徑。home是邏輯虛擬的路徑,照片沒有重復)
但也有網友反映:DSM7.0 基礎功能沒問題,docker、Synology Photos沒問題。運行3個月Synology Photos比moment好用很多,預覽、分類、特別是家庭用戶家分享功能很棒。別的功能沒試,不多評價
四、不少第三方套件由於安全原因已不再支持或需要第三方再更新才能支持
如 DSM7.0系統不再支持SVN,由6.2 升級且原有使用SVN的客戶可能就無法正常使用。
解決辦法:可用Docker搭建SVN Server 替代
DSM7.0 也不再支持 VPN Server, 也需要使用Docker方式安裝來替代
Synology 在 DSM 7.0 中添加了嚴格的要求,以防止未經 Synology 簽名的套件以 root 許可權運行。這是因為,具有 root 許可權的套件可以採用 root 用戶身份執行命令,並危害系統安全。
由於進行了此更改,從 DSM 6.2 升級的套件應更改其許可權設置,以便能夠在 DSM 7.0 中運行。
下表列出了 DSM 7.0 當前支持的第三方套件。新的兼容套件可用時定期更新該列表。
套件名稱
支持狀態
Acronis TrueImage —
ArchiwareP5 —
ArchiwarePure —
Data Deposit Box Backup V
DiXiM Media Server V
Domotz V
ElephantDrive —
EynioServer —
GoodSyncServer —
IDrive —
KodExplorer —
LogicalDOC8 —
MEGAcmd —
MinimServer —
Nakivo Backup and Replication —
nConnect V
Nakivo Transporter —
NordVPN —
Plex Media Server V
QuikFynd —
Resilio Sync —
Sony BraviaMeeting —
Sony BraviaSignage —
sMedio DTCP Move V
Syncthing —
Teamviewer —
VirtualHere —
玩物下載 (Onewu download) V
花生殼動態域名 —
V:當前支持
—:當前不支持
五、DSM7.0控制台比DSM6.2少了不少的功能
即精簡了控制台的功能(也許這樣系統啟動速度也要快一些),將部分不常用的功能變成獨立app了,如果需要,可以自己去安裝。
⑦ 做軟體測試需要具備哪些技能
1、 軟體測試基礎知識:
測試計劃編寫、設計測試用例、編寫測試報告、編寫BUG報告單、跟蹤BUG修復情況、還需要良好的溝通能力、以及各種測試階段所使用的測試方法、單元測試、功能測試、集成測試、系統測試等等、CMMI /ISO9001
2、 各種測試工具的使用:
我們在測試的工作中為了能夠提高工作效率進程會用到很多工具、QTP、LR、QC、TD、Bugfree、VSS、SVN等等工具、雖然說工具不是萬能的但是工具能為我們提高工作效率所以不能吧工具當神一樣看待、但是必須得會熟練的使用
3、 操作系統相關知識:
Windows、linux、uinx這些都必須會使用、而且不僅僅是簡單的操作、一般的服務管理、注冊表編輯、命令行操作都需要會、可以想像下一個連apache服務都不會安裝配置的人、誰能想像你可以做好基於apache環境的測試工作、什麼?不知道怎麼查看磁碟壓力、IO數據。windows linux都有提供自帶的工具可用於查看這些數據、perfmon、top什麼的。
4、 資料庫知識:
現在Oracle的DBA待遇比一般的開發人員待遇還高就知道資料庫在企業中的重要性了、作為測試人員雖然不需要有DBA的能力、但是基本的資料庫操作你必須得會把、不管是Oracle、DB2、MSsql還是mysql最少都應該能熟悉使用其中的一二。
5、 計算機硬體知識:
做過性能測試的朋友都知道在性能測試過程中硬體性能也是一個非常重要的指標、CPU、內存、IO、帶寬等等、如果你是做硬體測試的。那麼就更不用說了。交換機、路由器、防火牆這些設備都需要有所了解。
6、 網路協議:
如果你還知道TCP和UDP有什麼不一樣的話請趕快去補充點知識吧、互聯網時代、一切都通過網路傳輸、常用協議必須得了解、曾經面試了一個測試工程師做了2年的測試居然不知道自己測試軟體使用什麼協議、這樣的人是你的話你敢招么?
7、 開發語言即代碼編寫能力:
雖然不會寫代碼也能做測試、但是如果你想做到高級測試工程師以上、那麼代碼編寫能力就是必選項、如果不會寫代碼、那麼你不可能成為高級測試。高級測試工程師的一部分工作就是在寫測試工具。雖然測試也需要寫代碼但不需要和開發一樣那麼精通某一門語言、可是測試卻需要了解很多門開發語言(舉一個簡單的例子:你現在所在的項目從C++語言、2年後你換工作了、新公司的開發語言是java或者是VB什麼的)所以在開發語言中測試需要更廣的學習。
8、 行業知識:
行業知識之所以寫在最後面是因為前面的7條我們都可以通過學習來掌握、但是唯獨行業知識卻只能通過工作經驗來積累、不要說你去看幾本書就知道通信行業、醫療行業、或者是航天行業、你認為在書本上面能學到么?
由於行業知識的特殊性所以建議朋友們不要頻繁的跳槽、經驗的積累是需要時間來沉澱的。
9、 具有一定的美學觀:
這個說起來比較拗口一點、簡單來說不管是開發活動還是測試活動、最後的目標就是將產品推向市場、而且得到用戶的認可。所以如果產品在需求分析階段就出現了偏離用戶航道、那麼就算測試 開發做得再好這個項目也是一樣會失敗。所以各位如果有幸能夠參加需求評審的話、請不要吝嗇你的言論。
10、請不要忘記時刻學習著:
這點我相信大家應該都能理解所以不用寫什麼:僅此一點「不學習就會落後」
總結:說了那麼多技能或者是說是需要掌握的技術、如果你沒有一顆發現缺陷之美的心態、沒有一顆以提高質量為前提來投入工作中、那麼就算你其他做得再好也不過是萬千軟體測試從業人員中的一枚。測試活動大部分用於發現缺陷、而發現缺陷之後的工作尤為重要:怎麼樣從發現缺陷到提高質量。
⑧ 10個頂級Mongodb GUI工具,以圖形方式管理資料庫
MongoDB是一個面向文檔的資料庫,屬於NoSQL資料庫,它使用類似JSON的文檔和schemata。
MongoDB的默認介面是(CLI)命令行,新用戶很難像專業人員那樣處理資料庫。因此,有一些MongoDB管理工具來提供GUI界面以提高生產力。就像phpmyadmin為MySQL/MariaDB資料庫提供基於HTTP網路的GUI界面一樣。但是,此處包含的所有工具都不是基於HTTP的,只有少數工具為MongoDB提供Web界面。以下是使用GUI的比較流行的MongoDB管理工具列表:
要從具有圖形用戶界面的MongoDB開始,MongoDB是最好的方法之一。MongoDB Compass Community由MongoDB開發人員開發,這意味著更高的可靠性和兼容性。它為MongoDB提供GUI mongodb工具,以 探索 資料庫交互;具有完整的CRUD功能並提供可視方式。藉助內置模式可視化,用戶可以分析文檔並顯示豐富的結構。為了監控伺服器的負載,它提供了資料庫操作的實時統計信息。就像MongoDB一樣,Compass也有兩個版本,一個是Enterprise(付費),社區可以免費使用。適用於Linux,Mac或Windows。
NoSQLBooster是MongoDB CLI界面中非常流行的GUI工具。它正式名稱為MongoBooster。NoSQLBooster是一個跨平台,它帶有一堆mongodb工具來管理資料庫和監控伺服器。這個Mongodb工具包括伺服器監控工具,Visual Explain Plan,查詢構建器,SQL查詢,ES2017語法支持等等......它有免費,個人和商業版本,當然,免費版本有一些功能限制。NoSQLBooster也可用於Windows,MacOS和Linux。
ClusterControl是另一個MongoDB工具,具有管理資料庫基礎結構的GUI。它還有兩個版本 - 社區和企業版。不用說,ClusterControl社區版可以免費使用,而企業則是付費的。它不僅限於MongoDB,還支持MySQL,MySQL復制,MySQL NDB集群,Galera集群,MariaDB,PostgreSQL,TimescaleDB,Docker和ProxySQL。
ClusterControl為資料庫基礎架構提供全自動安全性,該基礎架構具有單個圖形用戶界面,可操作和自動化MongoDB和MySQL資料庫環境。它可通過YUM/APT提供回購,適用於Linux平台(RedHat,Centos,Ubuntu或Debian)。
Nosqlclient是一個免費的開源MongoDB管理工具,基於Web的GUI意味著不再需要命令行來管理資料庫。我們可以使用Nosqlclient在MongoDB中插入,刪除或更新數據,而無需使用查詢。它可作為桌面應用程序,Docker和Web應用程序使用。Web使用HTTP為MOngoDB提供基於瀏覽器的界面。
Robo 3T由MongoDB客戶端Studio 3T的開發人員維護和提供。以前,Robo 3T被稱為Robomongo。它也是適用於Windows,MacOS和Linux的跨平台MongoDB GUI管理工具。它具有相同的引擎和環境,是MongoDB shell(3.2)的一部分。
上面提到的Robomong被3T收購並更名為Robot 3T;現在是Studio 3T的一部分。那麼,Studio 3T是什麼?與其他提到的MongoDB管理GUI工具一樣,Studio 3T也是一個基於GUI的工具,用於管理資料庫,但在付費類別中。但是,此工具的30天免費試用版允許用戶在投入資金之前使用並了解其功能。與免費和開源Robot 3T相比,Studio 3T具有更多功能並提供企業支持。與Robo 3T相同,它也適用於Windows,Linux(Ubuntu和CentOS)和MacOS。
Mongo Management Studio是一個用於資料庫管理的免費MongoDB GUI工具。它輕巧,界面清晰,易於開發基於MongoDB的項目。它使用nodeJs,Electron框架,MongoDB和AngularJs開發。MMS與MongoDB 3.0/3.2/3.4兼容。
與上述所有MongoDB管理工具一樣,用戶可以輕松安裝它,但免費版僅適用於Windows;而企業和個人則適用於Linux,Windows和MacOS。企業版(Web伺服器)支持MongoDB Web界面HTTP GUI,這意味著我們可以在主伺服器上安裝,之後可以在本地或遠程使用瀏覽器的任何系統上訪問。但是,個人版和免費版只能在已安裝它們的本地系統上使用。
它是面向關系,NoSQL和雲平台的資料庫開發人員的通用集成開發環境(IDE)。因此,支持各種資料庫來開發,訪問,管理和可視化分析數據。
對於MongoDB,Aqua Data Studio使用具有管理和資料庫查詢功能的圖形用戶界面作為管理工具。Aqua Data studio的Visual界面允許用戶瀏覽和修改資料庫結構,包括模式對象和集合,以及維護資料庫安全性。
它提供了一個MongoDB資料庫工具包,包括各種工具,如Visual Analytics,MongoSQL查詢參考,MongoJS查詢分析器,MongoShell MongoShell,FluidShell,查詢和分析工具,網格和數據透視圖,表數據編輯器,導入和導出工具,實體關系建模;Visual Query Builder;比較工具:架構比較,文件比較;SQL 歷史 記錄,Open API腳本環境,集成安全Shell(SSH)和版本控制:Subversion(SVN),Git,CVS,Perforce。
MongoJS查詢分析器Javascript編輯器允許執行JavaScript命令並支持自動完成和語法突出顯示。結果可以在樹層次結構,網格結果和文本中看到。
作為付費產品,Aqua Data Studio的試用版提供14天,具有所有企業功能。所以,如果你正在尋找一些付費產品,那麼你可以在花錢之前免費試用它。它適用於Windows,Linux和MacOS。
這聽起來像phpMyAdmin工具。但是,phpMoAdmin也是PHP編寫的但是可用於MongoDB。它基於Vork PHP框架。很輕巧,易於安裝。它只有115KB的moadmin.php文件,用戶可以放在網站的任何地方開始工作。
它是一個跨平台的MongoDB管理工具,在Open Source許可下發布,使用Electron框架和Angular JS構建。可在GitHub上找到。
以上談到了Windows,Linux和MacOS MongoDB管理客戶端,所以那些正在尋找智能手機和平板電腦的用戶mongoDB管理可以試試Mongolime。它為MongoDB移動客戶端提供了輕松連接和訪問MongoDB伺服器的功能。它具有內置的SSH隧道,可以通過SSL輕松驗證和連接遠程伺服器。MongoLime是免費增值MongoDB客戶端應用程序,支持iOS和Android平台。
使用Node.js,Express和Bootstrap3編寫的基於Web的MongoDB管理界面。它允許連接多個資料庫;查看/添加/刪除資料庫,集合和文檔;預覽音頻/視頻/圖像資產;GridFS支持 - 添加/獲取/刪除難以置信的大文件;在文檔中使用BSON數據類型,Mobile / Responsive - Bootstrap以及更多功能。
⑨ 如何使用docker+jenkins實現自動化集成
Docker 介紹
Docker
號稱是下一代的虛擬機,它在啟動和創建速度、性能、移植性等方面均優於傳統虛擬機。Docker 是 PaaS 提供商 dotCloud
開源的一個基於 LXC 的高級容器引擎。它能夠讓開發者打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux
機器上,也可以實現虛擬化。目前,通過 Boot2Docker 已能使 Docker 運行在 Windows 和 OS X 中。Docker
容器完全使用沙箱機制,相互之間沒有任何介面。Docker 幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,
他們不依賴於任何語言、框架或系統。
Docker 在其網站上明確地提到的 Docker 的典型應用場景如下:
對應用進行自動打包和部署
創建輕量、私有的 PAAS 環境
自動化測試和持續整合與部署
部署和擴展 Web 應用、資料庫和後端服務
在自動化測試領域,Docker 大有取代傳統虛擬機技術的趨勢,原因如下:
自動化測試依賴的是測試所需要的應用,而並非整個操作系統。因此,傳統的虛擬機技術存在資源浪費。
Docker 構建於 LXC 之上。藉助 LXC 輕量級的特性,相比於目前的虛擬機技術,Docker 啟動更快、資源佔用更小。
Docker 比虛擬機輕量、靈活,便於管理。
Docker 標准化的構建方法 (Dockerfile) 和良好的 REST API,使得自動測試和持續集成/部署能夠很好的集成進來。
回頁首
Sahi 介紹
Sahi 是一個開源的 Web UI 自動化測試框架。盡管它的知名度不及 Selenium,用戶群也不及 Selenium 龐大,但它確有它獨特的魅力,例如:
基於上下文的頁面元素識別機制。
隱式頁面載入響應等待機制。
良好的瀏覽器支持。
優秀的跨瀏覽器錄制回放調試工具 Sahi Controller。
這些特性都大大地加快了自動化測試腳本的開發速度,並降低了維護成本。
Sahi
通過一個用 Java 編寫的代理伺服器,將用戶的腳本轉換為 JavaScript 後注入往返的 HTTP
請求及響應中,從而驅動瀏覽器事件。編程語言方面,除 Sahi 腳本(其本質是一個 JavaScript 庫)以外,還支持 Java 和
Ruby。Sahi 有開源和收費兩個版本。雖然收費版本提供了很多開源版本不具備的高級特性,不過開源版本已經能夠滿足大部分的功能要求。點此查看開源版本與收費版本的差異。點此查看Sahi 與其他 Web 自動化測試框架的對比。
回頁首
Jenkins 介紹
Jenkins
是一種開源的基於 Java 開發的持續集成工具,前身稱作 Hudson。Jenkins
提供了用於監控持續重復工作的軟體平台。它支持豐富的插件,用戶可以按照需求進行選擇安裝和配置,以實現生成執行狀態表格,自動部署、更新自動化測試包等
高級功能。本文將要介紹 Jenkins 的 Docker 插件,它能夠動態地創建 Docker 容器作為 Jenkins Slave
節點,並在執行任務後,自動關閉容器。另外,它還支持一些額外功能,比如當構建任務成功完成後自動將容器保存為鏡像、自動將鏡像上傳到資源庫等。
回頁首
實例演示
該實例演示如何製作一個運行 Sahi 的鏡像以及如何在 Jenkins 上配置 Docker 插件以運行 Sahi 測試腳本。
准備 Docker 鏡像
本實例需要准備三個鏡像:一個運行 Jenkins,一個運行 Subversion,另外一個運行 Sahi。
首先,製作運行 Sahi 的鏡像。Docker Hub 是一個用於分享 Docker 鏡像的資源庫。目前,該資源庫還沒有運行 Sahi 的鏡像,所以必須自己創建 Dockerfile 來構建鏡像。下圖是用來製作 Sahi 鏡像的目錄。
圖 1. 製作 Sahi 鏡像的目錄
下圖是 Dockerfile 的文件內容。
圖 2. Dockerfile文件內容
整個過程大體分為八個步驟:
指定基礎鏡像
我們使用的是 evarga/jenkins-slave。該鏡像基於 Ubuntu,安裝了 SSH 服務,並創建了用戶 Jenkins。
替換系統默認更新源。把系統更新源替換為 163 的,後面的軟體安裝速度會比較快一些。
安裝必要的軟體(不包括 Oracle Java 和
Sahi):Firefox, Unzip 以及 Xvfb。刪除 Open JDK 是為了後面安裝 Oracle Java 做准備。Firefox
不用多說,因為該鏡像用於 Web UI 自動化測試,所以安裝了最新版本的 Firefox。安裝 Unzip 是因為後面安裝 Sahi
需要用到它。Xvfb(X virtual framebuffer)是一個 X11
顯示伺服器的實現。它不是將圖形在屏幕上顯示出來,而是在內存中運行所有的圖形操作。對客戶端來說,除了無法看到真正的圖形顯示,沒有其他分別。一般稱這
種運行方式為 headless。
安裝 Oracle Java 8。理論上 Sahi 應當也支持 Open JDK,所以安裝 Oracle Java 不是必須的。
安裝 Sahi。上傳了 zip 文件後,用 Unzip 解壓,Sahi 是基於 Java 的,所以解壓後即已安裝好 Sahi。之後,替換了幾個文件,它們的作用如下:
Userdata.properties
userdata.properties 中有個屬性叫
proxy_alert.disabled,默認值為 false。用戶第一次啟動 Sahi Dashboard
的時候,會彈出一個如下圖所示的對話框。用戶勾選了「Do no show this message again」並點擊 Continue
按鈕之後,Sahi 修改該屬性值為 true。之後就不會在跳出這個對話框了。由於用 headless 的方式運行 Sahi
無法點擊該對話框,所以必須事先用一個已將該屬性設置為 true 的文件替換 Sahi 默認的 userdata.properties。
圖 3. Sahi 代理問題對話框
sahi_example_com
這是一個證書文件。用戶第一次在 Sahi Dashboard
中打開 Firefox 時的頁面如下圖所示。用戶需要點擊 SSL Manager 鏈接手動接受 SSL 證書。此時,文件
sahi_example_com 被生成到 userdata/certs 目錄下。之後,就不需要再進行該操作了。所以,復制的
sahi_example_com 目的也是為了自動完成這步需要在圖形界面下才能完成的操作。
圖 4. Sahi 啟動頁
圖 5. SSLManager 的非信任連接頁面
browser_types.xml
替換該文件是為了使 Sahi 以 headless
的方式工作。在該文件中,事先添加了一個名字為 firefox-xvfb 的瀏覽器配置信息。之後,測試腳本就可以指向該瀏覽器運行。具體配置 Sahi 和 Xvfb 的步驟參考。
添加 init.sh 文件
init.sh 文件用於啟動 Xvfb 和 Sahi。其內容如下。
圖 6. init.sh 文件內容
「sleep 5」是因為 Sahi 啟動需要一點時間,若立即運行測試腳本會導致失敗。
修改許可權
最終運行的容器是作為 Jenkins Slave 節點用
Jenkins 用戶運行,因此將整個/usr/local 目錄及子目錄的所有人修改為 Jenkins,並給 Shell
文件添加執行許可權。Jenkins 用戶是在基礎鏡像 evarga/jenkins-slave 中創建的,所以在這個 Dockerfile
里沒有創建 Jenkins 用戶的語句。
指定默認執行的命令
CMD ["/usr/sbin/sshd","-D"] – 該語句令鏡像默認啟動 SSH 服務。事實上,這條語句也可以不添加,因為 evarga/jenkins-slave 的 Dockerfile 中已包含該語句。
一
切就緒之後,在該目錄中執行「docker build -t shenrui/sahi –rm=true」。命令成功執行後,通過「docker
images」應當可以查看到名為「shenrui/sahi」的鏡像。該鏡像已經上傳到 Docker Hub,有需要的讀者可以自行拉取。
Sahi
鏡像構建好之後,接下來准備 Jenkins 容器。Docker Hub 上已有官方的 Jenkins 鏡像,直接用命令「docker pull
jenkins」拉取。在 Docker 主機上,創建一個目錄(例如,/data/jenkins_home),並修改許可權(chmod
777)以便 Jenkins 容器能讀寫該目錄,然後用命令「docker run -d -t --name myjenkins -p
8080:8080 -v /data/jenkins_home:/var/jenkins_home jenkins」啟動。此時,打開
http://<Docker Host IP>:8080 應當可以看到 Jenkins 的管理頁面。
同樣地,直接拉取 Docker Hub 的 Subversion
的鏡像(docker pull bsboiko/subversion)。不過,還需要做進一步的配置。步驟如下:
用命令「docker run -i -t bsboiko/subversion /bin/bash」以交互的方式啟動 Subversion 容器。
在容器中創建目錄 /var/svn/repos(mkdir -p
/var/svn/repos),並基於該目錄創建 Subversion 資源庫(svnadmin create
/var/svn/repos)。
在資源庫目錄下的 svnserve.conf
文件中刪除「password-db = passwd」前面的注釋符 #,並在 passwd 文件中添加一行「shenrui =
password」。
用命令「docker commit <container id> mysvn」把上面所做的修改保存下來創建一個新鏡像 mysvn。
最後,用命令「docker run -t -d -p
3690:3690 --name mysvn mysvn svnserve -d --foreground -r
/var/svn/repos」啟動 mysvn 容器。啟動時,添加容器到主機的埠映射「-p 3690:3690」以便之後直接通過主機 IP
提交測試腳本。
至此,Docker 上有兩個正在運行的容器(docker ps),名字分別是 myjenkins 和 mysvn。