1 概述
Jenkins是一款開源的、基于Java開發的持續集成(CI)與持續交付(CD)工具,旨在通過自動化構建、測試和部署流程,提升軟件開發效率與質量。 ?
1.1 核心功能與特點
-
持續集成與交付?
Jenkins支持自動化構建、測試和部署,通過頻繁集成代碼(如每日多次)快速發現錯誤,確保軟件質量。
提供Pipeline功能,可定義完整的CI/CD流程,覆蓋從代碼提交到生產環境部署的全生命周期。
?插件生態系統? -
擁有數百個插件
支持與Git、Maven、Docker等工具集成,擴展性強。插件涵蓋版本控制、測試框架、部署平臺等,滿足多樣化需求。 -
易用性與可擴展性?
提供Web界面配置,無需數據庫支持,安裝簡單(支持War包、RPM等方式)。
支持分布式構建,可在多臺機器上并行執行任務,提升效率。 -
跨平臺支持?
兼容Windows、Linux、macOS等操作系統,適應不同開發環境。
1.2 應用場景
?大型項目與微服務架構?:頻繁更新的項目(如微服務)可通過Jenkins實現高效自動化部署。
?敏捷開發與DevOps?:作為CI/CD核心工具,支持團隊協作與快速迭代。
2 環境
資源 | 說明 |
---|---|
jenkins master | 10.0.11.239、centos 7.9、docker運行、工作目錄/home/jenkins/jenkins_home |
jenkins slave1 | 10.0.3.64、centos 7.9、docker運行、工作目錄/home/jenkins/agent |
3 部署
通過docker容器部署一個jenkins master節點和一個jenkins slave節點。部署成功后,可在web控制臺看見一個集群。
3.1 jenkins master部署
3.1.1 安裝docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install yum-utils -y
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates
yum install docker-ce-cli-20.10.5-3.el7 docker-ce-20.10.5-3.el7 -ymkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{"max-concurrent-downloads": 10,"log-driver": "json-file","log-level": "warn","log-opts": {"max-size": "100m","max-file": "3"},"live-restore": true,"exec-opts": ["native.cgroupdriver=systemd"]
}
EOFsystemctl daemon-reload
systemctl enable docker
systemctl restart docker
3.1.2 安裝docker-compose
docker run --privileged --rm -v /usr/local/bin/:/dest registry.cn-hangzhou.aliyuncs.com/lwmacct/file:docker-compose-linux-x86_64-v2.2.3-t2022020101
docker-compose -v
3.1.3 安裝jenkins master
工作目錄宿主機的/home/jenkins/jenkins_home,需要從容器里映射出來。
生成docker-compose.yml文件:
mkdir -p /home/jenkins
cd /home/jenkinscat > docker-compose.yml << EOF
version: "3.8"
services:jenkins:image: jenkins/jenkins:ltscontainer_name: jenkinsrestart: alwaysprivileged: trueuser: rootvolumes:- /home/jenkins/jenkins_home:/var/jenkins_home- /var/run/docker.sock:/var/run/docker.sockports:- "8080:8080"- "50000:50000"environment:TZ: Asia/Shanghai
EOF
docker-compose up -d
瀏覽器訪問:服務器IP:8080端口。
[ Manage Jenkins ] —> [ Appearance]中,設置語言為中文。
3.1.4 新增jenkins工作節點的預配置
工作節點的名稱設置為slave01,工作目錄設置為:/home/jenkins/agent。
從上圖可以看見,工作節點加入jenkins集群的命令很簡單。記住這些命令的參數,稍后,參數信息會放到容器的環境變量中。
3.2 jenkins slave部署
slave服務器也需要安裝docker組件,命令參考上面的步驟。
3.2.1 創建jenkins slave容器鏡像
下載Agent的API如下:
GET /jnlpJars/agent.jar
使用curl命令即可下載:
mkdir -p /tmp/jenkins-agent
cd /tmp/jenkins-agent
export master=10.0.11.239:8080
curl -sO http://$master/jnlpJars/agent.jar
Dockerfile內容如下:
FROM jenkins/agent:latest-jdk17USER root
ENV TZ=Asia/Shanghai
COPY agent.jar /home/jenkins
RUN chown jenkins:jenkins /home/jenkins/agent.jarRUN sed -i "s@http://\(deb\|security\).debian.org@https://mirrors.aliyun.com@g" /etc/apt/sources.list.d/debian.sources
RUN apt-get update && apt-get install -y \git \maven \curl \&& rm -rf /var/lib/apt/lists/*USER jenkins
CMD java -jar agent.jar -url $JENKINS_MASTER_URL -secret $JENKINS_SECRET -name $JENKINS_AGENT_NAME -webSocket -workDir $JENKINS_WORKDIR
使用docker build命令即可,這里有一個現成的容器鏡像:
docker pull swr.cn-south-1.myhuaweicloud.com/migrator/jenkins-agent:latest-jdk17
3.2.2 創建jenkins slave容器
將slave01工作節點加入jenkins集群,依據節點加入的預配置信息填充下面的環境變量:
useradd -u 1000 -s /sbin/nologin jenkins
mkdir -p /home/jenkins/agent
chown -R jenkins:jenkins /home/jenkinsexport JENKINS_MASTER_URL=http://10.0.11.239:8080/
export JENKINS_SECRET=**************在web控制臺復制得到的密鑰**************
export JENKINS_AGENT_NAME=slave01
export JENKINS_WORKDIR=/home/jenkins/agentdocker run -d \--name jenkins-agent-test \-e JENKINS_MASTER_URL=$JENKINS_MASTER_URL \-e JENKINS_SECRET=$JENKINS_SECRET \-e JENKINS_AGENT_NAME=$JENKINS_AGENT_NAME \-e JENKINS_WORKDIR=$JENKINS_WORKDIR \
swr.cn-south-1.myhuaweicloud.com/migrator/jenkins-agent:latest-jdk17
slave容器啟動后依據環境變量的信息加入jenkins集群,在jenkins控制臺可見slave工作節點已成功連接到master節點:
4 小結
本文通過實戰介紹利用docker容器部署jenkins集群。