DevOps課程-Configuration Management with Ansible 16

Project Deploy Nexus-Part2

ZONGRU Li
11 min readApr 8, 2022

目前進度對應當初建置的指令整理:

當初建置nexus時,為了rootless,有特地建立新的User — nexus

並將下載解壓縮的目錄權限掛給nexus這個User

#在Linux介面下執行以下指令,會同時建立user,group:
adduser nexus

但是在Ansible則需要分為兩步驟

1.先建group(module link):

  • (在目標機Linux環境用"group" module,windows"win_group")

2. 再建user(module link):

  • (在目標機Linux環境用"user" module,windows用"win_user")

接著後面才接目錄權限轉換

這邊偶爾會有疑問,哪些module才能對應到Linux 指令

我發現可以這樣查到:

寫好後大概長這樣:

#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml

然後跑一跑錯了...

調整一下:

再跑一次:

然後發現這邊建立user名子打錯naxue X,nexus O:

再重新執行:

進到目標機內確認:

接著第四個Play:

先進去目標機上看看那個檔案nexus.rc:

裡面內容只有:

基本上我們要靠Ansible變成這樣:

這個不儲存,要用Ansible來改成這樣!!

而專門處理這類文字檔的insert/update/removemodule是:

blockinfile

多行像這樣:

接著執行

#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml

進目標機檢查看看:

哦哦!還會有Ansible的Block!

這邊先手動還原留原始的第一行:

儲存

這邊示範用update的方式:

使用的module — lineinfile:

  • 確保特定行存在,或透過regex改寫特定行
  • 專門拿來改檔案中的single line
  • (多行修改請洽 — "replace" module)

執行

#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml

成功:

一樣進到目標機內確認:

成功!

然後此時注意到解壓縮動作每次都重複做:

調整為:

這邊就執行驗證看有沒有問題:

執行正常!

接著繼續完成4th Play,剩餘的啟動Nexus部分

#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml

實際上:

所以每次都應該再多寫個檢核啟動步驟(如之前一樣):

參考之前的Playbook

然後這邊其實講師也提到,還有一個啟動問題是機台太小(Resource不夠!)

可以直接進到目標機手動看到這個問題:

#透過另一個指令看到啟動異常(不是start那個):
/opt/nexus/bin/nexus run

所以當下這台就需要移除重建:

重建:

其餘設置相同

這邊講師就順便重新強調了兩件事

1.

假若我們手動辛辛苦苦做了一連串建置前置動作

最後發現悲劇的卡再Resource不足,結果全部重來

但是透過Ansible!! 我們是完成了一連串的腳本Script!!!

而這個Script可以直接套用給新的機台!

假設來十台要建置也不用怕了!!

2.

然後這邊要開始調整新的機台IP位置:

各個Play上的hosts也要調:

很多個,不一一截圖了

所以這邊改hosts檔用IP群組的寫法,才是相對較好的做法:

(可參考第5篇筆記,記得hosts檔內不吃desh符號,需要的話用下底線)

所以hosts檔內容改為:

deploy-nexus.yaml內容上hosts位置都用名稱:

一樣上到主控機上執行(記得hosts檔也有改,也要放上去):

#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml

新機台重跑要久一點

有順利跑完新機台!

講師的是有啟動成功,但是我的不行:

看起來還是需要改成:

重跑:

看起來還是失敗:

但是確認手動可以:

我驚人的發現過一陣子連手動起的也會掛:

之前查找log的位置沒有看到錯誤log了:

最後我發現(注意以下的process id:22587)

然後看到/var/log/syslog裡面最後出現:

果然還是機台配置不夠大...

我大概又換一台,反正上完這部分就要關目標機了

新機IP:

所以hosts檔又要小調一下:

忘了看舊的那台memory有多少,這台新的是:

4G

重跑:

#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml

有順利跑完Ansible Playbook:

進到新的目標機一看job也還在:

順便看一下剛剛看到的/var/log/syslog

看起來沒有掛掉的log出現!!

我這邊嘗試一下用講師的設法

先關掉nexus:

改成(沒有async,poll=0,sh -c"cmd"):

依樣順利跑完Playbook:

在看看目標機上的job有沒有出現:

居然沒有消失...

阿不過這邊想到,這個/opt/nexus/bin/nexus start

本身就是背景執行了!...

所以我剛剛command module就不會卡住

接著

接著第五個Play:

紅框的部分

這邊一樣要先移除目前的nexusjob:

撰寫新的Play如下:

執行:

#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml

其原因是,啟動還沒完全完成,所以PORT還沒咬上8081...

這時候進到目標機去看:

因為我是隔了幾分鐘後才進去看,就已經是啟動完成的狀態了

要完成稍微延遲,或等待的module則要找 — pause

另外也有另一個module也可以做到 — wait_for

後面還有等待file建立...etc

這邊簡單實作:

會停60秒

基本就教到這邊

我自己順便優化:

就是判斷說是否目標機上已經有運行nexusprocess

沒有才做start動作

在有運行的狀態下,真的會skip:

最後重跑完整的,有無process都可以執行:

當我已經kill後才執行,不會skip

重跑(有process)會skip:

紀錄目前Code:

當前deploy-nexus.yaml內容:

當前hosts:

ansible.cfg沒變:

該部分開另一個git branch存放 — nexus_startup

最後我就把這個Droplet移除了(省錢!)

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet