Preparation:
收先這邊就移除掉前面用的node server的Droplet:
然後建立新的機台,規格如下:
建立好後得到新的Droplet IP:
這邊開始建立新的Playbook — deploy-nexus.yaml
更改當前的host檔內的IP,其他不動:
開始撰寫剛剛建立的deploy-nexus.yaml:
在那之前先把先前Nexus安裝的指令整理出來放在一個臨時檔案內:
大概整理如下:
針對安裝jre與net-tools部分當作一個Play開始撰寫:
接著是wget下載及解壓縮的部分是下一個Play:
其中取而wget代之的是get_url這個module
大概完成這一段落
就可以試著執行(將檔案放主控機上跑,記得hosts檔也有調整):
#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml
然後講師跑沒問題,我的出錯:
如上,看起來是get_url下載不到
確認了一下官網還有當初的版本可以下載:
在主控機ping發現會卡住:
curl會有302
試著直接在主控機上做wegt
wget https://download.sonatype.com/nexus/3/nexus-3.37.3-02-unix.tar.gz
看起來可以:
接著是ssh到新的目標機試著wegt看看:
所以這邊重跑看看playbook:
?????????????????????????????????????????????????????
完成後還是進去目標機看一下:
緊接著再撰寫解壓縮:
執行:
#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml
在目標機看到:
至此雖然運作正常,但是還是有調整空間
先移除目標機上下載與解壓縮檔:
首先調整下載的url同講師用的latest
然後嘗試從debug中拿到下載的檔案名稱:
然後試著執行看看debug會看到啥:
其中有:
接著解壓縮部分打開註解並調整成:
執行:
然後到目標機台上確認:
接著安插一步在原本步驟中沒有的,將帶有版本號的nexus目錄改名
如上面nexus-3.38.1–01目錄改成nexus就好
所以要先拿到這不確定的版本號的目錄
這邊需要用到regular expression方式,所以需要額外module — find:
執行看看結果:
看起來可以找到完整絕對路徑名稱
接著就可以用shell module的mv指令處理目錄改名了!
執行:
進到目標機確認有改成功:
Conditionals in Ansible:
如上的script如果直接再重跑會看到:
確定目標機台上/opt/nexus目錄底下物件的時間:
再次執行script看看會部會有覆蓋的動作
然後在這第三次才報錯:
原因前面提過,針對shell與command兩個module是沒有檢核ok
每次都會重複必執行的
所以需要條件式來避免這個錯誤!在shell的task前面加入module — stat:
執行看看得到:
放大:
是已存在!!!
至於如何透過這個true/false來決定執行shell task則是增加判斷為:
接著再次執行:
#在遠端主控機的~/ansible目錄下執行:
ansible-playbook -i hosts deploy-nexus.yaml
最後看到:
目前deploy-nexus.yaml內容: