『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

這次就走到軟件的最後一站,哈哈,就是把軟件給發佈部署到服務器上。其實在部署的過程中,尤其現在微服務架構的盛行,軟件本身喜歡用什麼敏捷開發,導致持續發佈的困難也是相當的大,原來不管項目怎麼整,只要最後把項目部署好,可以正常的訪問這個項目就部署好了。但是一旦把項目拆的很散,拆的很多個服務的時候,這時候想部署起來真的不是一個簡單的事情。需要使用科學的方法和經驗把這個事情搞定。

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

大規模系統發佈所面臨的問題

尤其現在很多領導都喜歡敏捷開發,敏捷開發就導致本來要一個星期開發的功能,他給你說2天。爲什麼要2天,敏捷開發就是快,敏捷開發本身就是有問題的。

  • 現在很多公司是如何發佈的。多久發佈一次。

    身邊的幾種情況

1.自己打包,給領導一說就直接發佈了。領導說什麼時候上就什麼時候發佈。
2.告訴運維人員項目git的位置,通知運維上線運維拉取,運維人員發佈到生產環境。(如果項目幾百,幾十個,告訴運維,運維需要多大體積的團隊啊)
3.每天都有小更新,每天都在發佈。
4.項目發佈用了jenkins工具,通過它進行自動化的構建發佈。


  • 說說身邊的發佈中存在的問題
    1.本來問題沒有的,參數寫錯了。
    2.依賴的項目沒有發佈,自己先發布了
    3.依賴版本的項目本身不在本次發佈,結果自身項目依賴那個項目的功能
    4.運維人員把測試環境的代碼發佈到生產環境了



  • 回滾導致的事故

    回滾,一般很難做到如果單純是代碼級別的還好說,直接備份回滾到上一次就可以了,如果涉及到刷數據庫是不是就尷尬了,新版本的數據都刷過了,但是代碼回滾了,是不是要把數據在重新刷回到未刷的狀態。可能你刷過去的腳本有,但是刷回來的腳本可能就沒有了。這就是事故了。

要把一個項目,尤其大規模的項目,大型互聯網項目都是拆的很散的,幾十個上百個,那些項目都是拆的很散的,他們之前還有項目依賴,他們發佈起來真的是很難很的事情。

  • 軟件發佈其實是個非常非常困難的事情,非常考驗管理人員的水平,如何全局把控,如何順序執行。

    隨着敏捷開發模式和微服務的盛行,導致軟件集成難度變大,持續部署變得困難,如何減少發佈導致的事故,縮短交互週期,做到可持續部署!其實這也是世界難題,太難了,只能根據自身業務本來來進行設定,不求最新最好,只求最適合自己的。

  • 軟件的開發階段

    正確的軟件開發的階段:編碼 > 構建 > 集成 >測試 > 交付 >部署
    可持續的集成> 可持續的部署 > 可持續的發佈

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

  • 持續集成 (INTEGRATE)

    集成:如果是單體開發的話,就沒有集成這一說,所有的功能都在一個項目,在軟件開發過程中都已經集成好了,相當於都已經集成好了。現在越來越流行的是一個功能並不是由一個項目來開發的,比如一個交易中心雙11的時候,提交購物信息的時候,可能依賴庫存中心,商品中心,支付中心,會員中心,通知中心。開發提交訂單這一個功能,後面依賴了一大堆的系統,加入修改提交訂單這一個小bug,可能影響到N多個項目都需要修改。極有可能你部署提交訂單這個項目,其他N多個項目都需要同步進行部署。

官方解釋:軟件個人研發部分向軟件整體部分交付,頻繁的進行集成以便更快的發現其中的錯誤。

  • 持續交互(DELIVER)

    交互:類似線上的預演環境,其實有時候稱之爲灰度環境,及時我們測試我們也需要在預演環境先走一遍,有的功能要求沒有這麼嚴格可能就直接測試了沒有預演環境,更多的公司可能直接build後就deploy了。

官方解釋:在持續集成的基礎上,將集成後的代碼部署到更貼近真實運行環境

  • 持續集成,持續交互面臨的最大的問題

    協調和寫作的問題
    依賴的包,依賴的項目說好的要在同一時間一起上線的,結果不知道什麼原因,它就掉鏈子,自身的項目不能如期發佈,但是自身的項目可能依賴另一個功能可能需要的接口,導致另外的接口也無法發佈,就形成了一個鏈條,一個功能不能如期,導致其他所有的都無法如期。都崩潰。

1.最大的問題就是協調,協作的問題
2.如果當時約定了,是否考慮應急方案,提前告知無法提供,

  • 順利的可持續化集成需要做到以下幾點
    1.一個清晰的可執行的發佈流程
    2.一個熟悉該流程的發佈管理協調人員(這種人必須擅長多線程處理問題)
    3.有效的溝通和反饋機制(confluence做信息反饋)
    4.可持續化集成工具(jenkins)
    5.版本管理工具(並不單指代碼的管理工具,日常發佈的程序文件SVN)




版本發佈流程所需環境(confluence,SVN)

  • 信息協調工具(confluence)
    1.月度發佈計劃(比較粗)
    2.周發佈計劃(產品經理,提交本次日常要發佈功能)
    3.測試人員提交具體的發佈窗口計劃文檔(開發人員編寫本次自身負責的系統,及依賴關係和腳本checklist,可以上線前截止某個時間可以修改,可以共同編寫文檔)
    4.線上事故報告單(bug修復計劃)



  • 版本管理工具(發佈文件,不是代碼級別的)

    git(git步驟繁瑣,需要add,commit,push)
    nexus
    ftp(共享文件)最簡單的方式。
    svn


  • confluence

    介紹:Confluence是一個專業的企業知識管理與協同軟件,也可以用於構建企業wiki。使用簡單,但它強大的編輯和站點管理特徵能夠幫助團隊成員之間共享信息、文檔協作、集體討論,信息推送。也可以作爲公司內部的團隊協作軟件,在線編輯word,execel,ppt等。這個功能與騰訊的在線編輯word,execel類似。但是它的功能更強大。
    源碼:https://github.com/limingios/netFuture/tree/master/confluence

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

官網: https://www.atlassian.com/software/confluence/download-archives
不建議使用最新的,本身這個軟件是收費的,我建議大家下載 5.6.6,爲什麼呢,因爲可以破解 嘿嘿

環境準備
1.CentOS 7
2.java jdk 1.8
3.mysql-server 5.6
4.confluence 6.9.1



『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

  • 服務信息

    通過vagrant 生成虛擬機

系統類型 IP地址 節點角色 CPU Memory Hostname
Centos7 192.168.68.100 confluence 2 4G confluence
vagrant up
su -
#密碼 vagrant
vi /etc/resolv.conf
#nameserver 8.8.8.8
reboot
  • jdk 安裝

    必須安裝jdk8

wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
#上邊的下載比較慢,建議不通過wget的方式,本地下載後上傳上去,我下載了3個多小時,當時正好想看電視劇看了幾集
tar -zxvf jdk*
cd jdk*
#獲取jdk目錄填寫到下面JAVA_HOME中
pwd
#追加環境變量
echo "export JAVA_HOME=/root/jdk1.8.0_141" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
#執行下面這個才能生效
source /etc/profile
java -version
javac -version

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

  • mysql 安裝
#下載mysql 源
wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
#安裝mysql 源
yum -y install mysql57-community-release-el7-11.noarch.rpm
#安裝mysql,中間會彈出是與否的選擇,選擇y即可,然後耐心等待吧。。。。。。。
yum  install mysql-community-server
#啓動mysql
systemctl start  mysqld.service
#查看mysql狀態
systemctl status mysqld.service
#查看初始密碼
grep "password" /var/log/mysqld.log
#登錄
mysql -uroot -p
#輸入剛纔查看的初始密碼

#修改密碼:我這裏修改成:1qaz@WSX
ALTER USER 'root'@'localhost' IDENTIFIED BY '1qaz@WSX';

#授權遠程訪問
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '1qaz@WSX' WITH GRANT OPTION;

#刷新上邊操作,就是提交操作
FLUSH PRIVILEGES;
#退出mysql控制檯
exit

#設置自動啓動
systemctl enable mysqld
systemctl daemon-reload

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

confluence是可以使用內嵌數據庫的額,但是作爲生產環境的話,confluence是建議使用自己的數據庫的,
在安裝數據庫的時候是支持多種的數據庫的,我這裏用的是mysql,版本5.6/5.7都可以。還有需要連接mysql的jar包mysql-connector。

首先是配置文件/etc/my.cnf,在[mysqld]標籤下添加

vi /etc/my.cnf
[mysqld]
character-set-server=utf8
collation-server=utf8_bin
default-storage-engine=INNODB
max_allowed_packet=256M
innodb_log_file_size=2GB
sql_mode = NO_AUTO_VALUE_ON_ZERO
transaction-isolation=READ-COMMITTED
binlog_format=row

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

最後是重啓mysqld,並登陸mysqld查看字符集,創建數據庫的時候設置的密碼是:1qaz@WSX

service mysqld restart
mysql -uroot -p
mysqld [(none)]> show variables like "%character%";show variables like "%collation%";

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

爲Confluence創建對應的數據庫、用戶名和密碼

create database confluence default character set utf8 collate utf8_bin;
grant all on confluence.* to 'root'@'%' identified by '1qaz@WSX';
flush privileges;
  • 安裝Confluence
# 下載安裝程序
wget https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.9.1-x64.bin
# 授權安裝程序執行權限
chmod a+x atlassian-confluence-6.9.1-x64.bin
# 執行安裝程序,進行安裝:

./atlassian-confluence-6.9.1-x64.bin
[root@confluence ~]# chmod a+x atlassian-confluence-6.9.1-x64.bin
[root@confluence ~]# ./atlassian-confluence-6.9.1-x64.bin
Unpacking JRE ...
Starting Installer ...

This will install Confluence 6.9.1 on your computer.
OK [o, Enter], Cancel [c]
#選擇確定安裝
o
Click Next to continue, or Cancel to exit Setup.

Choose the appropriate installation or upgrade option.
Please choose one of the following:
Express Install (uses default settings) [1], 
Custom Install (recommended for advanced users) [2, Enter], 
Upgrade an existing Confluence installation [3]
#目錄選擇自定義
2

Select the folder where you would like Confluence 6.9.1 to be installed,
then click Next.
Where should Confluence 6.9.1 be installed?
[/opt/atlassian/confluence]
#這裏填寫自定義目錄
/usr/local/atlassian/confluence

Default location for Confluence data
[/var/atlassian/application-data/confluence]

Configure which ports Confluence will use.
Confluence requires two TCP ports that are not being used by any other
applications on this machine. The HTTP port is where you will access
Confluence through your browser. The Control port is used to Startup and
Shutdown Confluence.
Use default ports (HTTP: 8090, Control: 8000) - Recommended [1, Enter], Set custom value for HTTP and Control ports [2]
#端口默認8090
1

Confluence can be run in the background.
You may choose to run Confluence as a service, which means it will start
automatically whenever the computer restarts.
Install Confluence as Service?
Yes [y, Enter], No [n]
#自動啓動 選擇y
y

Extracting files ...

Please wait a few moments while we configure Confluence.

Installation of Confluence 6.9.1 is complete
Start Confluence now?
Yes [y, Enter], No [n]
#選擇y
y

Please wait a few moments while Confluence starts up.
Launching Confluence ...

Installation of Confluence 6.9.1 is complete
Your installation of Confluence 6.9.1 is now ready and can be accessed via
your browser.
Confluence 6.9.1 can be accessed at http://localhost:8090
Finishing installation ...

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

https://blog.csdn.net/weixin_41004350/article/details/80590421

進入瀏覽器訪問,如果是英文可以選擇【語言】中文,選擇【產品安裝

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

先不要選擇任何插件

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

記錄服務器ID (B5BE-SJ3C-N42I-XCN0)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

提取破解文件,關閉Confluence

# 進入你安裝的目錄
cd /usr/local/atlassian/confluence    
 # 關閉confluence
bin/stop-confluence.sh  
# 將confluence 下面的一個atlassian-extras-decoder-v2-3.3.0.jar包複製一份出來
cp confluence/WEB-INF/lib/atlassian-extras-decoder-v2-3.3.0.jar ~/

# 將其改名爲atlassian-extras-2.4.jar
mv ~/atlassian-extras-decoder-v2-3.3.0.jar ~/atlassian-extras-2.4.jar
#安裝傳輸工具
cd ~
yum -y install lszrz

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

破解文件,源碼裏面有。

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)
然後本地window電腦操作:
① 打開下載的破解工具,運行confluence_keygen.jar
②將記錄的server ID填入,Name隨便填。
③點擊gen, 生成key並記錄。
④點擊patch,選擇剛下傳到本地的atlassian-extras-2.4.jar文件進行破解。
⑤不要關閉破解工具,過會需複製key裏面的密鑰





『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

OK,破解完成後,將破解後的文件傳回服務器

cd ~
mkdir bak
cd bak
# 傳回服務器後,將名稱改回之前的名稱
mv atlassian-extras-2.4.jar atlassian-extras-decoder-v2-3.3.0.jar

# 然後覆蓋回原路徑
mv atlassian-extras-decoder-v2-3.3.0.jar /usr/local/atlassian/confluence/confluence/WEB-INF/lib/

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

Confluence本身是沒有集成mysql驅動的,需要自己下載並上傳,原本在你安裝的時候,輸入key之後,會需要填入mysql連接信息,那裏會有鏈接指向官方文檔,教你如何配置mysql。但是配置完成後需要重啓,會導致前面的破解出問題,所以,這裏要一起完成後再重新啓動。官方教程文檔地址如下:
https://confluence.atlassian.com/doc/database-setup-for-mysql-128747.html
源碼中包括:mysql的驅動
解壓後把mysql-connector-java-5.1.46-bin.jar傳到服務器上,放到confluence的類目錄下:


sz 

cp mysql-connector-java-5.1.46-bin.jar /usr/local/atlassian/confluence/lib/

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

  • 上述操作完成後,重啓完成重啓confluence,

    想不花錢確定麻煩沒辦法

service confluence start

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

回到輸入key的界面,輸入上面記錄的key【之前說了別關閉破解軟件】,點擊下一步

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

選擇我自己的數據庫

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

OK,到此安裝完成。關於Confluence的使用,http://www.confluence.cn/pages/viewpage.action?pageId=360467,界面描述是不是就是軟件開發使用的,很高大上啊。非常貼合軟件開發流程文檔的思路

  • SVN安裝
    1.通過yum命令安裝svnserve
    yum -y install subversion

    『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)


2.創建版本庫目錄(此僅爲目錄,爲後面創建版本庫提供存放位置)

mkdir /var/svnrepos
  1. 創建版本庫目錄
    svnadmin create /var/svnrepos/svn

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

  1. 配置svn

    authz:負責賬號權限的管理,控制賬號是否讀寫權限
    passwd:負責賬號和密碼的用戶名單管理
    svnserve.conf:svn服務器配置文件

    cd /var/svnrepos/svn/conf

    『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

編輯 authz 文件
[/]:表示根目錄,即 /var/svnrepos
admin = rw:表示用戶luo對根目錄具有讀寫權限。

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

編輯 passwd 文件

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

編輯 svnserve.conf 文件(注意:配置的前面不能有空格,一定要頂格寫)
anon-access = none:表示禁止匿名用戶訪問。
auth-access = write:表示授權用戶擁有讀寫權限。
password-db = passswd:指定用戶名口令文件,即 passwd 文件。
authz-db = authz:指定權限配置文件,即 authz 文件。
realm = /var/svnrepos:指定認證域,即 /var/svnrepos 目錄。




『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

『互聯網架構』軟件架構-軟件環境的持續發佈管理(上)

PS:本次主要說了項目管理中存在的問題和如何解決,另外說了confluence 和 svn的安裝,很不錯的軟件,confluence說了一些黑科技破解的方案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章