IaC with Terraform 25

Complete CI/CD with Terraform — Part 3

ZONGRU Li
7 min readOct 26, 2023

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就又能建立新的機台

程式紀錄在:

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

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

No responses yet