IaC with Terraform 25
Execute PIPELINE & fix mistakes
先將當前的程式內容推上Git:
其實前面撰寫的PIPELINE多多少少會有小錯誤,就需要邊執行邊驗證
例如我個人電腦IP,不過因為是浮動IP到是無所謂,這個異動就不貼了
然後試著執行:
調整後push
新建Jenkins還沒裝maven,裝一裝:
後來遇到卡在build jar:
找不到BRANCH_NAME,問題來自:
所以我直接加在:
接著在跑卡到:
#啟動指令掛docker進去用:
docker run -p 8080:8080 -p 50000:50000 -d \
-v /opt/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
jenkins/jenkins:lts
#進去容器內修改sock權限:
docker exec -it -u 0 {容器id} bash
chmod 666 /var/run/docker.sock
後來順利在包image了:
但是因為有容器重啟的關係,terraform沒了:
#順便整理容器內安裝wget terraform等指令:
apt-get update
apt-get install -y gnupg software-properties-common
apt-get install wget
#2.Install the HashiCorp GPG key.
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
#3.Verify the key's fingerprint
gpg --no-default-keyring \
--keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
--fingerprint
#4.Add the official HashiCorp repository to your system:
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
tee /etc/apt/sources.list.d/hashicorp.list
#5.Download the package information from HashiCorp:
apt update
#6.Install Terraform from the new repository:
apt-get install terraform
過程中若出現:
可以先去刪除/etc/apt/sources.list.d/hashicorp.list檔案
接著卡到:
再跑!
執行到:
看到:
上圖也說明了為什麼需要sleep,因為要等機台建起來
接著卡在:
被建置機防火牆要允許Jenkins機連過去操作
同樣若Jenkins機台IP常常變動,也可以透過"TF_VAR_變數"方式取代default值
最後調整完刪除流程錯誤建置的EC2機台重跑
成功!!!
慢慢地突破讓流程都變成綠色正常的!!!
Terraform執行部分正常:
但是最後拉image其實是有問題的,因為根本還沒做docker login:
docker login to pull Docker image
首先可以注意到的是,我們其中有做過docker login:
但是現在是被建置的機台要做這件事
可能執行的地方會是在:
就是這個檔案內:
改成外部注入帳號與密碼變數後執行echo方式登入:
首先同前面課程要有docker hub憑證:
上面憑證就包裹了帳號與密碼
使用上變成:
上述可參考文件(LINK):
把上述改動都commit push後再次執行Jenkins Job
最後成功
試著在Jenkins機上面ssh連到被建置出來的EC2機台查看結果:
至此我們確實地完成了這個流程:
Destroy all component & run complete CI/CD pipeline
現在有個問題是,我們其實沒有保留到Terraform state檔案
如果用同樣的Terraform code,在本機執行init與plan
會發現變成建置新的機台資源,但是跟上面PIPELINE建立的資源是脫鉤的
但是這邊有一個workround可以在Jenkins上執行移除,就是
如上調整完後,按下Run:
過程看到log:
AWS上面確認EC2機台也真的消失
重新再跑該PIPELINE就又能建立新的機台
程式紀錄在: