jenkins docker
客製化Jenkins docker image
2022/09/12 15:47:31
2
1110
一、說明
筆者最近替公司產品「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需要花費時間 | 一小時 | 五分鐘 |
三、製作image的Dockerfile說明
# 使用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/