雖然這篇網誌叫做「如何使用Jenkins」,但為了後續操作上更方便,還是決定用一個章節,紀錄一下Docker-compose與dockerfile。這篇主要會說明一些Jenkins一些功能及操作,以利後續測試最陽春的CI/CD。
建立Jenkins Container的第二種方法
什麼是Docker Compose
透過Docker run指令,可以下載Image並開啟Container,但假設一個系統同時需要開啟很多個Container提供不同的服務,透過指令啟用單一容器並不是很有效率。使用Docker Compose這個工具,可以撰寫YAML檔案,用來管理容器。安裝Docker-Compose的方式可參考(參1),阿猩安裝的版本為2.10。
在目錄下建立一個檔案叫docker-compose.yml,如果檔案名稱不是「docker-compose.yml」,執行docker-compose up時,會給予錯誤提示。docker-compose.yml的內容會長得像是
version: ‘3’
services:
Jenkins:
container_name: Jenkins
image: jenkins/Jenkins
restart: always
ports:
- “8080:8080”
Volumes:
-“$PWD/jekins_home:/var/jenkins_home”
Networks:
- net
networks:
net
大多數參數的用法跟docker run 很像,如容器命名、使用的image檔案、port設定等,有興趣的可參考(參2、參3)。最後,只要輸入
docker-compose up -d
就可以啟用Container啦
Docker File
關閉容器後,期間所有設定都會不見,如果每次都要進入容器中,重新進行設定,會非常的不方便,這時dockerfile就派上用場囉。透過Dockerfile,可以將服務初始化所需的工作,分別用簡單的指令寫好,建立一個資料夾ubuntu18.04,並在裡面建立Dockerfile,內容會長得像是
FROM ubuntu:18.04
WORKDIR /app
RUN apt-get update
RUN apt-get install openssh-server -y
RUN useradd remote_user && \
echo 'remote_user:remote_user' | chpasswd
COPY remote-key.pub /home/remote_user/.ssh/authorized_keys
RUN chown remote_user:remote_user -R /home/remote_user/.ssh/
RUN chmod 700 /home/remote_user/.ssh/authorized_keys
RUN echo "Port 22" >> /etc/ssh/sshd_config
EXPOSE 22
CMD /etc/init.d/ssh start
先不管內容實際要完成哪些工作,我們可以整理出一些指令(參4、參5),並初步了解個別指令的用途(參6)。
- From:根據此行會下載欲建立的映像檔,也可透過冒號指定版本
- ENV:設定此容器的環境變數
- WORKDIR:在容器內建立目錄,並作為工作目錄
- ADD或Copy:將本機檔案複製到WORKDIR設定的路徑
- RUN:執行Linux指令
- EXPOSE:開放Container對外的port
- CMD :執行Linux指令 (參7)
建立好dockerfile後,可以在同路徑下執行docker 指令啟用容器。
docker build -t image_name
docker ps
docker run ……
使用Docker-Compose,讀取Dockerfile並建立啟用多個容器
在docker-compose.yml中,加入同樣的架構,並用Context參數,指定要用來建立容器的路徑,docker-compose-yml內容會像是
version: '3'
services:
jenkins:
container_name: jenkins
image: jenkins/jenkins
ports:
- "8080:8080"
volumes:
- "$PWD/jenkins_home:/var/jenkins_home"
networks:
- net
remote_host:
container_name: remote-host
image: remote-host
build:
context: ubuntu18.04
tty: true
networks:
- net
networks:
net:
再下一次docker-compose up -d,就可以開啟2個容器。
初探Jenkins
使用介面完成第一個初步測試
在瀏覽器輸入localhost:8080後就可以開始使用Jenkins了,選擇左側的New Item(圖1),
並建立一個Freestyle project(圖2),建立後可在My View中察看狀態(圖3)
選擇Configuration可使用Linux的echo指令做簡單測試(圖4)
。選擇Build Now就可以看到Build及Console Output結果(圖5、圖6)。
如果要建立Globel參數也可以透過General中的 Add Parameter來建立(圖7)。
使用套件建立新帳號並設定權限
如果需要多人共同使用或管理,需要針對帳號給予權限,在Manage Plugins中找到Manage and Assign Roles套件並安裝(圖8、圖9)
在Configure Global Security中指定Authorization的方式(圖10)
設定完成後Manage Jenkins中會出現Manage and Assign Roles的功能(圖11),點進去就可以對帳號進行權限設定(圖12)。
建立Email通知
選擇Configure System,在最下方可以找到send test-email的區塊,先進行信箱測試(圖13),成功後會收到信件(圖14)。
測試過後就可以正式的設定信箱帳號,但因為Google在2022/05進行修改,之後不能直接用原密碼於第三方登入了,但可建立第三方使用的金鑰(圖15),因此設定時密碼要改為Google產生的金鑰。
當工作Build失敗後就會收到信件啦(圖16)
建立Trigger
最後,透過Build Trigger,可以設定工作觸發的時間,這裡阿猩測試範例為固定時間執行,選擇Build periodically(圖17),可以用Schedule的參數(參8)完成工作排程。除了定期之外,甚至可透過git進行poll,可設定當有新的commit時,就呼叫Jenkins該工作啦。阿猩曾經以Source Tree測試成功,github也有Git Action可用。
有了上述的功能,當程式碼有更新時,可以定期,或是由git repository進行呼叫,來實現最陽春的CI/CD。這篇已說明如何建立第二個容器,作為遠端主機,下一篇再來測試用ssh請求遠端主機,進行即時換版。