當前位置:
首頁 > 最新 > 構建自動化工具記錄,釋放我們的雙手

構建自動化工具記錄,釋放我們的雙手

你曾是少年

S.H.E

00:00/04:49

一,構建工具

1 什麼是構建工具?

維基百科給出的概念如下:

Build automation is the process of automating the creation of a software build and the associated process including:compiling computer source code into binary code,packageing binary code,and running automated tests.

翻譯如下:

構建工具是一個把源代碼生成可執行應用程序的過程自動化的程序,包括:將計算機源碼編譯成二進位代碼,打包二進位代碼以及運行自動化測試。

構建的自動化其實就是自動化的執行一系列動作,而這些動作在軟體開發中經常使用,例如:

下載依賴

將源代碼編譯成二進位代碼

打包生成的二進位代碼

進行單元測試

部署到生成系統。

2 為什麼要使用構建自動化?

因為我們不想在做機械重複的事情,解放我們的雙手的,讓一些流程自動化地執行完成我們想要的任務。在小型項目中,開發者往往手動調用構建過程,但是在大型的項目中很不實用,在構建過程中難以跟蹤什麼需要被構建,按照什麼順序構建以及項目中存在哪些依賴,使用自動化工具會使構建過程更連續,工作效率更高。

二,部署應用程序

部署自己的應用程序,要根據具體情況具體分析,然後給出一套解決方案。這裡只是做個簡單的示例:本次我們需要部署的對象是Spring Boot應用程序,所以為此開發一個自動化構建工具,讓一切流程自動化,方便快捷部署應用程序到應用伺服器。

搭建環境,Linux系統下安裝JDK 和Maven工具

JDK是Java語言的軟體開發工具包,主要用於移動設備,嵌入式設備的java應用程序。JDK是整個Java開發的核心,它包含了Java的運行環境(JVM+Java系統類庫)。

Apache Maven是一套軟體工程管理和整合工具。基於工程對象模型(POM)的概念,通過一個中央信息管理模塊,Maven能夠管理項目的構建,報告和文檔。

本次操作,我們在阿里雲伺服器上安裝JDK和Maven工具。

在/home目錄下創建兩個文件夾:jvm和maven目錄。

JDK的下載和解壓

下載完成之後解壓,

tar -zxvf jdk-8u161-linux-x64.tar.gz

此次操作存放在/home/jvm/目錄,重命名文件夾為jdk1.8。

Maven的下載和解壓

下載maven的tar包

wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.3-bin.tar.gz

下載完成後解壓tar包

此次操作存放在/home/maven/目錄,重命名文件夾為maven3.5.3

配置環境變數

重啟機器或者執行命令

source /etc/profile或sudo shutdown -r now

查看安裝情況

出現上面信息,則表示JDK和Maven已經在Linux下成功安裝。

三,版本控制工具

版本控制工具提供完備的版本管理功能,用於存儲,追蹤目錄和文件的修改歷史,是軟體開發者必備的工具。目前,自己在工作中已經接觸過三種版本控制管理工具,分別是Clearcase,Git,SVN版本控制系統。

Clearcase是由IBM Rational Software提供,此軟體是配置管理方面的高端軟體,功能強大,價格極高。

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

git是一個開源的分散式版本控制系統,快速高效的處理從很小到非常大的項目版本控制。

SVN是基於CVS的基礎上,有CollabNet提供開發的,也是開源工具,使用非常廣泛,非常受大家歡迎。

版本控制工具的作用

可以協同代碼管理,讓多人開發代碼得以實現。

回歸到以前的任何一個已記錄版本的代碼處。(對比之後發現之前更加美好,依然可以歸位。版本控制工具用日誌記錄了文件的每一次修改,可以通過查看日誌回到任何一個自己想要的版本)。

代碼衝突的問題,主要是多人操作同一個文件(團隊開發很常見)。

可以查看每個人具體的操作,便於出現問題後及時排查(由於某個員工個人失誤造成很大的bug,可以方便的追究責任)。

集中式版本控制和分散式版本控制的對比:

Git和SVN是目前最常用的團隊協作的版本控制系統。

SVN是集中式版本控制系統,版本庫是集中放在中央伺服器的。如下圖:

集中式版本控制,有一個包含所有版本文件的單個伺服器和一個數字(版本號),所有的客戶端從這個Server上檢出文件(只是文件,本地沒有倉庫的概念)。

集中式的版本控制必須連接網路才能工作,嚴重的缺陷就是中央伺服器的單點故障。如果伺服器宕機一個小時,在這期間,沒有任何人可以在工作的版本上很好的保存某一個版本的改變。另外,如果中央資料庫的磁碟壞了,並且沒有保存備份,那麼將丟失所有的東西

分散式版本控制(Git)

Git是目前世界上最先進的分散式版本控制系統。

Git 中每個克隆(clone)的版本庫都是平等的。可以從任何一個版本庫的克隆來創建屬於自己的版本庫,同時你的版本庫也可以作為源提供給他人,只要你願意。Git 的每一次提取操作,實際上都是一次對代碼倉庫的完整備份。提交完全在本地完成,無須別人給你授權,你的版本庫你作主,並且提交總是會成功。Git 的提交不會被打斷,直到你的工作完全滿意了,PUSH給他人或者他人PULL你的版本庫,合併會發生在PULL和PUSH過程中,不能自動解決的衝突會提示你手工完成。

Git的缺點就是工作目錄只能是整個項目。比如 checkout,建分支,都是基於整個項目的,而 svn 可以基於項目中的某一個目錄。

對比結果:

git是分散式的scm,svn是集中式的。(最核心)

git是每個歷史版本都存儲完整的文件,便於恢復,svn是存儲差異文件,歷史版本不可恢復。(核心)

git可離線完成大部分操作,svn則不能。

git有著更優雅的分支和合併實現。

git有著更強的撤銷修改和修改歷史版本的能力。

git速度更快,效率更高。


在SVN中,如果不需要任何歷史信息,只想要某個版本純粹的代碼(經常會有這種需求,這樣做本地數據比較小) 那麼,使用svn export命令即可以實現。在git中,似乎沒有這樣的命令,不過,由於git的本地倉庫信息完全維護在project根目錄的.git目錄下,(不像svn一樣,每個子目錄下都有單獨的.svn目錄)。所以,只要clone,checkout然後刪除.git目錄就可以了。

四,shell編程實例總結

這裡我主要是把相關的操作過程過程函數化,這樣就可以精簡代碼以及為了代碼的復用。

1)判斷文件夾是否存在,不存在則創建

2)判斷當前執行命令是否執行成功。

3)shell如何檢測網路連通性?

網路性能的好壞直接影響程序對外提供服務的穩定性和可靠性。

4)談談Log日誌記錄

在項目開發中,記錄錯誤日誌是一個很有必要的功能,好處如下:

方便調試;

便於發現系統運行過程中的錯誤;

存儲業務數據,便於後期分析;

簡單定義Log日誌級別如下:

info:輸入你感興趣的或者重要信息,綠色列印輸出。

success: 執行成功的重要的信息,屏幕綠色字元列印輸出,並記錄到log文件中。

error:錯誤信息,屏幕紅色字元列印輸出,退出當前程序,並記錄到log文件中。

示例代碼如下:

5)shell中exit 0 和exit 1的區別

exit(0):正常運行程序並退出程序;

exit(1):非正常運行導致退出程序;

exit 0 可以告知你的程序的使用者:你的程序是正常結束的。

exit 非 0 值,可以告知你的程序的使用者:你的程序產生了一個錯誤,異常結束。

在shell中調用完你的程序之後,用echo $?命令就可以看到你的程序的exit值。

在shell腳本中,通常會根據上一個命令的$?值來進行一些流程式控制制。在一個腳本中如果要執行多條命令,那麼如何確保調用此shell腳本中的所有命令都執行成功!那麼看看上面log_error中的exit 1命令吧。

五,系統服務管理工具Systemd的使用

在項目中,是否開機啟動應用程序或者啟動依賴的相關服務程序,我們可以根據具體需求分析,自己定義的相應 service 文件,通過systemd的主命令systemctl來管理服務。

對於那些支持 Systemd 的軟體,安裝的時候,會自動在/usr/lib/systemd/system目錄添加一個配置文件。我們可以通過Systemd的主命令systemct用於管理系統的相關服務。下面以nfs服務作為演示:

傳統的Linux系統啟動過程主要由著名的init進程(也被稱為SysV init啟動系統)處理,而基於init的啟動系統被認為有效率不足的問題。

下面的命令用來啟動服務。

$ sudo /etc/init.d/hpptd start#或者$ service hpptd start

這種方法有兩個缺點:

一是啟動時間長。init進程是串列啟動,只有前一個進程啟動完,才會啟動下一個進程。

二是啟動腳本複雜。init進程只是執行啟動腳本,不管其他事情。腳本需要自己處理各種情況,這往往使得腳本變得很長。

Systemd就是為了解決這些問題而誕生的。它的設計目標是,為系統的啟動和管理提供一套完整的解決方案systemd是Linux系統機器的另一種啟動方式,宣稱彌補了以傳統Linux SysV init為基礎的系統的缺點。

Systemd的優點是功能強大,使用方便,缺點是體系龐大,非常複雜。看看圖不說話,要深入理解和掌握Systend的,需要花費一段時間學習。

關於構建自動化,就是不想在做機械重複的事情,解放我們的雙手的,讓一些流程自動化地執行完成我們想要的任務,應用於工作中,效率極高。就目前工作中處理的問題,只要是人為操作都可以用程序自動化實現。

記得剛開始工作的時候,小團隊為了整個項目開發了一個自動化流程工具,讓人為操作流程需要花費兩個小時的工作,只需要執行一條命令就搞定了,這樣既防止了人為的錯誤,又提高了工作效率。後來工作中自己也幫過硬體工程師將處理BOM表的流程工作自動化,之前每一個工程師都需要花費一兩個小時去處理BOM表的數據,通過數據分析,將一些人為操作流程化開發出一個工具,最終的效果就是只要點擊一個按鈕,一分鐘之內搞定任務。

只要是人為操作的流程,一切都可以實現自動化,然後就可以偷懶睡覺去了。在想想人工智慧時代,機械性,可重複的腦力/體力勞動,都將被人工智慧/機器人取代,有些職業會面臨消失,這時候會需要更多新的,深度的,創意性的人才出現!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 shareeyes 的精彩文章:

TAG:shareeyes |