安裝 Jenkins

方式一、使用 rpm 包安裝

清華大學(xué)開源軟件鏡像站
rpm包地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.492.3-1.1.noarch.rpm

# 下載完 rpm 包后放到 linux root 目錄下
# Jenkins 需要 Java 運行環(huán)境
# 列出系統(tǒng)中所有與 JDK(Java 開發(fā)工具包)相關(guān)的軟件包
dnf list | grep java | grep jdk
# 安裝 java jdk 17
dnf install java-17-openjdk.x86_64 -y
# 安裝 jenkins
dnf install jenkins-2.492.3-1.1.noarch.rpm
# 安裝 git 版本控制系統(tǒng)軟件
dnf install git -y
# 設(shè)置 Jenkins 開機自啟
systemctl enable jenkins
# 開啟 Jenkins 服務(wù)
systemctl start jenkins

# 訪問 http://192.168.31.112:8080/ (虛擬機ip地址,端口號8080)
# 查看登陸密碼
cat /var/lib/jenkins/secrets/initialAdminPassword
# 檢查系統(tǒng)中是否存在名為 jenkins 的用戶賬戶
[root@jenkins ~]# cat /etc/passwd | grep jenkins
jenkins:x:993:990:Jenkins Automation Server:/var/lib/jenkins:/bin/false

# 將名為 jenkins 的用戶的默認登錄 shell 修改為 /bin/bash
sudo usermod -s /bin/bash jenkins 

# 恢復(fù) jenkins 用戶禁止登錄
sudo usermod -s /bin/false jenkins

# 在 Jenkins 服務(wù)器上以 jenkins 用戶生成密鑰:
sudo -u jenkins ssh-keygen -t ed25519 -f /var/lib/jenkins/.ssh/id_ed25519
# 查看公鑰內(nèi)容
sudo -u jenkins cat /var/lib/jenkins/.ssh/id_ed25519.pub
# 將公鑰拷貝到目標服務(wù)器
sudo -u jenkins ssh-copy-id -i /var/lib/jenkins/.ssh/id_ed25519.pub root@192.168.31.110

# 在 Linux 系統(tǒng)中,默認情況下 Jenkins 以 jenkins 用戶身份運行。
# 檢查 Jenkins 用戶所屬組
id jenkins
# 將 Jenkins 用戶添加到 docker 用戶組
sudo usermod -aG docker jenkins
# 重啟 Jenkins 服務(wù)
sudo systemctl restart jenkins

# 以 jenkins 用戶身份執(zhí)行 shell,然后執(zhí)行 docker ps,可以查看 jenkins 是否有權(quán)限執(zhí)行 docker ps
sudo -u jenkins bash

方式二、使用 docker 安裝

1、安裝 docker
# 添加阿里云docker-ce倉庫
dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 列出當前系統(tǒng)中所有可安裝的 docker-ce 版本,并按照版本號從高到低進行排序,同時顯示重復(fù)的版本。
dnf list docker-ce --showduplicates | sort -r
# 安裝最新版本 docker-ce,也可以指定版本安裝(dnf install -y docker-ce-20.10.15-3.el9.x86_64)
dnf install -y docker-ce
# 啟用Docker Cgroup用于限制進程的資源使用量,如CPU、內(nèi)存資源
# 創(chuàng)建目錄,存放 docker 的配置文件
mkdir /etc/docker
# 創(chuàng)建并寫入 /etc/docker/daemon.json 文件,設(shè)置 Docker 使用 systemd 作為 Cgroup 驅(qū)動
# registry-mirrors 配置:docker 鏡像加速器的地址列表。
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": [
    "https://qa9ktbtj.mirror.aliyuncs.com",
    "https://docker.m.daocloud.io",
    "https://docker.mirrors.ustc.edu.cn",
    "https://www.daocloud.io/mirror"
  ]
}
EOF
# 設(shè)置 docker 開機自啟
systemctl enable docker
# 啟動 docker
systemctl start docker
# 查看 docker 狀態(tài)
systemctl status docker
2、下載 jenkins
docker pull jenkins/jenkins:lts
3、安裝 jenkins

方式 1: 使用 Docker 直接運行

# 不需要執(zhí)行 docker 操作
sudo docker run -d \
  --name jenkins \
  --restart always \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

# 需要執(zhí)行 docker 操作
# Docker 容器默認使用 UTC 時間,最簡單的方法是將宿主機的時區(qū)文件掛載到容器中。這樣容器會繼承宿主機的時區(qū)設(shè)置。
# --user 查看下面?zhèn)渥?sudo docker run -d \
  --name jenkins \
  --restart always \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /usr/bin/docker:/usr/bin/docker \
  -v /etc/localtime:/etc/localtime:ro \
  --user "1000:993" \
  jenkins/jenkins:lts

方式 2:使用 Docker Compose 安裝(推薦)
root 目錄下創(chuàng)建 jenkins.yaml 文件,內(nèi)容如下:

version: '3.8'

services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    ports:
      - "8080:8080"   # Jenkins Web UI 端口
      - "50000:50000" # Jenkins 分布式構(gòu)建端口(可選)
    volumes:
      - jenkins_home:/var/jenkins_home  # 持久化 Jenkins 數(shù)據(jù)
    restart: always  # 容器崩潰時自動重啟

volumes:
  jenkins_home:  # 定義一個名為 jenkins_home 的數(shù)據(jù)卷
# 啟動 jenkins 服務(wù)
docker compose -f jenkins.yaml up -d

# 瀏覽器中訪問 http://192.168.31.112:8080

# 查看 jenkins 管理員密碼
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

備注:當 jenkins 中添加的任務(wù)需要執(zhí)行 docker 命令的時候,需要執(zhí)行下面的命令

# 獲取宿主機的 docker 組 GID
getent group docker | cut -d: -f3

# 在宿主機運行以下命令,確認 UID 1000 的用戶是否存在:
id -nu 1000  # 應(yīng)返回 "jenkins" 或其他用戶名
# 如果不存在,需先創(chuàng)建用戶并指定 UID:
sudo useradd -u 1000 -m jenkins
# 將 UID 1000 的用戶加入 docker 組
sudo usermod -aG docker $(id -nu 1000)

# 查看 jenkins 是否有執(zhí)行 docker ps 的權(quán)限
[root@jenkins ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED              STATUS              PORTS                                                                                          NAMES
9acb30a66cc7   jenkins/jenkins:lts   "/usr/bin/tini -- /u…"   About a minute ago   Up About a minute   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp, 0.0.0.0:50000->50000/tcp, [::]:50000->50000/tcp   jenkins
[root@jenkins ~]# docker exec -it 9acb30a66cc7 bash
jenkins@9acb30a66cc7:/$ docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                                                                                          NAMES
9acb30a66cc7   jenkins/jenkins:lts   "/usr/bin/tini -- /u…"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp, 0.0.0.0:50000->50000/tcp, [::]:50000->50000/tcp   jenkins
# 1. 在 Jenkins 容器內(nèi)生成 SSH 密鑰,發(fā)布到其它服務(wù)器的時候可以用 ssh 連接
# 進入 Jenkins 容器
docker exec -it jenkins bash
# 生成 SSH 密鑰對
mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""  # 無密碼
# 2. 將公鑰復(fù)制到目標服務(wù)器
# 示例: ssh-copy-id -i ~/.ssh/id_ed25519.pub root@192.168.31.110
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@target-server
# jenkins.yaml 內(nèi)容添加 user: "1000:993"(UID 1000:docker 組 GID 993)
version: '3.8'

services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    user: "1000:993"
    ports:
      - "8080:8080"   # Jenkins Web UI 端口
      - "50000:50000" # Jenkins 分布式構(gòu)建端口(可選)
    volumes:
      - jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
      - /etc/localtime:/etc/localtime:ro
    restart: always  # 容器崩潰時自動重啟

volumes:
  jenkins_home:  # 定義一個名為 jenkins_home 的數(shù)據(jù)卷
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容