【Jenkins】Jenkins入門

雖然這篇網誌叫做「如何使用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)。

  1. From:根據此行會下載欲建立的映像檔,也可透過冒號指定版本
  2. ENV:設定此容器的環境變數
  3. WORKDIR:在容器內建立目錄,並作為工作目錄
  4. ADD或Copy:將本機檔案複製到WORKDIR設定的路徑
  5. RUN:執行Linux指令
  6. EXPOSE:開放Container對外的port
  7. 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)

圖1

並建立一個Freestyle project(圖2),建立後可在My View中察看狀態(圖3)

圖2
圖3

選擇Configuration可使用Linux的echo指令做簡單測試(圖4)

圖4

。選擇Build Now就可以看到Build及Console Output結果(圖5、圖6)。

圖5
圖6

如果要建立Globel參數也可以透過General中的 Add Parameter來建立(圖7)。 

圖7

 

 使用套件建立新帳號並設定權限

如果需要多人共同使用或管理,需要針對帳號給予權限,在Manage Plugins中找到Manage and Assign Roles套件並安裝(圖8、圖9)

圖8
圖9

Configure Global Security中指定Authorization的方式(圖10)

圖10

設定完成後Manage Jenkins中會出現Manage and Assign Roles的功能(圖11),點進去就可以對帳號進行權限設定(圖12)。 

圖11
圖12

 

建立Email通知
選擇Configure System,在最下方可以找到send test-email的區塊,先進行信箱測試(圖13),成功後會收到信件(圖14)。

圖13
圖14

測試過後就可以正式的設定信箱帳號,但因為Google在2022/05進行修改,之後不能直接用原密碼於第三方登入了,但可建立第三方使用的金鑰(圖15),因此設定時密碼要改為Google產生的金鑰。

圖15

當工作Build失敗後就會收到信件啦(圖16)

圖16

 

建立Trigger
最後,透過Build Trigger,可以設定工作觸發的時間,這裡阿猩測試範例為固定時間執行,選擇Build periodically(圖17),可以用Schedule的參數(參8)完成工作排程。除了定期之外,甚至可透過git進行poll,可設定當有新的commit時,就呼叫Jenkins該工作啦。阿猩曾經以Source Tree測試成功,github也有Git Action可用。
 

圖17

有了上述的功能,當程式碼有更新時,可以定期,或是由git repository進行呼叫,來實現最陽春的CI/CD。這篇已說明如何建立第二個容器,作為遠端主機,下一篇再來測試用ssh請求遠端主機,進行即時換版。