jenkins docker

客製化Jenkins docker image

姜志民 2022/09/12 15:47:31
603

、說明

筆者最近替公司產品「digiRunner Composer視覺化API開發工具」進行CI/CD環境建置,遇到許多困難重重的問題。

一開始遇到的就是編譯環境gcc版本太舊,因為所使用建置主機linux版本也太舊,無法直接升級gcc版本。於是找了另一台主機linux版本較新的可以安裝新版gcc,但因為筆者沒有主機權限安裝套件,需要mail聯絡負責同事。

CI/CD過程中所需要的套件,都需要聯絡請同事安裝,在這溝通聯絡與安裝套件,就花了4~5天才弄好CI/CD環境。

筆者突發奇想乾脆弄一個100%自己可以掌握的CI/CD環境,可以減少溝通聯絡的時間。為了不受限主機環境,決定使用docker來執行Jenkins

 

二、「主機安裝的Jenkins  vs  Docker版本的Jenkins」比較

  主機安裝的Jenkins Docker版本的Jenkins
安裝設定流程 安裝Jenkins時,必須step by step設定相關Jenkins設定與選擇欲安裝套件。 不必step by step設定相關Jenkins設定與選擇安裝套件,因為在做image時已經設定好了。
Jenkins的套件 只要換一台主機,就必須重新安裝Jenkins套件。 因為做成image的時候,就已經將指定的Jenkins套件一併封裝到image。在啟動docker不必在耗時重抓套件。
安裝到執行Jenkins需要花費時間 一小時 五分鐘

 

三、製作imageDockerfile說明

# 使用jenkinse官方的image為基底,在後續的指令客製環境與套件
FROM jenkins/jenkins:lts-jdk11

# 設置運行映像時使用root使用者
USER root
# 安裝與更新linux套件
RUN apt-get update && \
    apt-get -y install apt-transport-https \
      ca-certificates \
      curl \
      gnupg2 \
      software-properties-common && \
    curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
    add-apt-repository \
      "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
      $(lsb_release -cs) \
      stable" && \
   apt-get update && \
   apt-get -y install docker-ce

# 安裝jenkins plugins
COPY ./jenkins-plugins /usr/share/jenkins/plugins
RUN jenkins-plugin-cli --plugins cloudbees-folder antisamy-markup-formatter build-timeout credentials-binding timestamper ws-cleanup ant gradle workflow-aggregator github-branch-source pipeline-github-lib pipeline-stage-view git ssh-slaves matrix-auth pam-auth ldap email-ext mailer locale

# 指定Jenkins帳號密碼
ENV JENKINS_USER admin
ENV JENKINS_PASS admin

#將id_rsa.pub 檔案存在 /root/.ssh/
RUN ssh-keygen -f /root/.ssh/id_rsa -t rsa -N ''

# 跳過Jenkins設定流程
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false

# 建立預設Jenkins的預設admin帳號
COPY default-user.groovy /usr/share/jenkins/ref/init.groovy.d/


 

四、Jenkins docker 上線部署實戰

以下的影片是從編譯docker image到執行container的展示,花費時間極少的!

 

五、參考資料:

https://www.jenkins.io/doc/book/installing/docker/

https://yallalabs.com/devops/jenkins/how-to-build-custom-jenkins-docker-image/

https://blog.miniasp.com/post/2021/05/02/Jenkins-on-Windows-06-Specify-Mirror-Site-to-Download-Plugins

 

姜志民