RockyLinux 9.5 部署 Jenkins

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。持续集成(Continuous Integration, CI)和持续交付/部署(Continuous Delivery/Deployment, CD),下面介绍两种方式部署 Jenkins。

一、环境准备

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 查看防火墙状态
firewall-cmd --state

二、使用 rpm 包安装

1、rpm 包下载

清华大学开源软件镜像站下载链接

2、Jenkins 和 Java JDK 版本对应关系

Jenkins 是使用 Java 编程语言编写的跨平台应用程序,Jenkins 的运行依赖于Java环境。官网地址
在这里插入图片描述

3、安装 java jdk

列出系统中所有与 JDK(Java 开发工具包)相关的软件包

dnf list | grep java | grep jdk

根据上面列出的版本列表自行选择 jdk 版本,推荐安装 java jdk 17

dnf install java-17-openjdk.x86_64 -y

4、安装 jenkins

下载完 rpm 包后放到 linux root 目录下,然后执行下面命令

dnf install jenkins-2.504.2-1.1.noarch.rpm -y

5、设置 Jenkins 开机自启并启动 Jenkins 服务

systemctl enable jenkins --now

6、浏览器访问 Jenkins

(1)访问 http://192.168.31.116:8080/ (虚拟机ip地址,默认端口号8080)。使用下面命令查看登陆密码,密码文件路径可在浏览器查看

cat /var/lib/jenkins/secrets/initialAdminPassword

在这里插入图片描述
(2) 点击 安装推荐的插件
在这里插入图片描述
(3) 创建管理员用户
在这里插入图片描述
(4) 点击 保存并完成,就可以开始使用 Jenkins
在这里插入图片描述

7、修改默认端口号(可选)

Jenkins 的默认配置文件 /usr/lib/systemd/system/jenkins.service(新版)或 /etc/sysconfig/jenkins(旧版)

(1)编辑 Jenkins 的默认配置文件

sudo vi /usr/lib/systemd/system/jenkins.service

(2)找到 JENKINS_PORT 参数并修改(例如改为 8081)

Environment="JENKINS_PORT=8081"

(3)重新加载 systemd 配置并重启 Jenkins 服务

sudo systemctl daemon-reload
sudo systemctl restart jenkins

8、jenkins 需要执行 docker 命令

# 在 Linux 系统中,默认情况下 Jenkins 以 jenkins 用户身份运行。
# 检查 Jenkins 用户所属组
id jenkins
# 将 Jenkins 用户添加到 docker 用户组,服务器需要安装 docker
sudo usermod -aG docker jenkins
# 重启 Jenkins 服务
sudo systemctl restart jenkins

# 以 jenkins 用户身份执行 shell,然后执行 docker ps,可以查看 jenkins 是否有权限执行 docker ps
sudo -u jenkins bash
# 根据下面输出可以看出 jenkins 有权限执行 docker 命令
[root@jenkins ~]# sudo -u jenkins bash
bash-5.1$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
bash-5.1$ exit
exit

9、其它

# 检查系统中是否存在名为 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 

# 恢复 jenkins 用户禁止登录
sudo usermod -s /bin/false jenkins

# 在 Jenkins 服务器上以 jenkins 用户生成密钥:
sudo -u jenkins ssh-keygen -t ed25519 -f /var/lib/jenkins/.ssh/id_ed25519
# 查看公钥内容
sudo -u jenkins cat /var/lib/jenkins/.ssh/id_ed25519.pub
# 将公钥拷贝到目标服务器
sudo -u jenkins ssh-copy-id -i /var/lib/jenkins/.ssh/id_ed25519.pub root@192.168.31.110

三、使用 docker 安装

1、安装 docker

# 添加阿里云docker-ce仓库
dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 列出当前系统中所有可安装的 docker-ce 版本,并按照版本号从高到低进行排序,同时显示重复的版本。
dnf list docker-ce --showduplicates | sort -r
# 安装最新版本 docker-ce,也可以指定版本安装(dnf install -y docker-ce-3:28.1.1-1.el9)
dnf install -y docker-ce
# 启用 Docker Cgroup用于限制进程的资源使用量,如CPU、内存资源
# 创建目录,存放 docker 的配置文件
mkdir -p /etc/docker
# 创建并写入 /etc/docker/daemon.json 文件,设置 Docker 使用 systemd 作为 Cgroup 驱动
# registry-mirrors 配置:docker 镜像加速器的地址列表。
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": [
    "https://docker.m.daocloud.io"
  ]
}
EOF
# 设置 docker 开机自启,并启动 docker
systemctl enable docker --now

2、拉取 Jenkins LTS 镜像

docker pull jenkins/jenkins:lts

3、安装 Jenkins

(1)两种方式

方式 1:使用 Docker Compose 安装(推荐)

① root 目录下创建 jenkins.yaml 文件,内容如下:
version: '3.8'

services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    ports:
      - "8080:8080"   # Jenkins Web UI 端口
      - "50000:50000" # Jenkins 分布式构建端口(可选)
    volumes:
      - jenkins_home:/var/jenkins_home  # 持久化 Jenkins 数据
    restart: unless-stopped

volumes:
  jenkins_home:  # 定义一个名为 jenkins_home 的数据卷
② 启动 jenkins 服务
docker compose -f jenkins.yaml up -d

方式 2: 使用 Docker 直接运行

sudo docker run -d \
  --name jenkins \
  --restart unless-stopped \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

(2)浏览器中访问 http://192.168.31.116:8080(虚拟机ip地址,默认端口号8080)

# 查看 jenkins 管理员密码
[root@jenkins ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED       STATUS       PORTS                                                                                          NAMES
37bff193c116   jenkins/jenkins:lts   "/usr/bin/tini -- /u…"   4 hours ago   Up 4 hours   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp, 0.0.0.0:50000->50000/tcp, [::]:50000->50000/tcp   jenkins
# 根据容器 id 进入容器,查看 jenkins 管理员密码
[root@jenkins ~]# docker exec -it 37bff193c116 bash
jenkins@37bff193c116:/$ cat /var/jenkins_home/secrets/initialAdminPassword
2b525474a18041bfad7a81a41c523cac

(3)当 jenkins 中需要执行 docker 命令时

# 获取宿主机的 docker 组 GID,比如这里得到的是 992,下面会使用
getent group docker | cut -d: -f3

# 在宿主机运行以下命令,确认 UID 1000 的用户是否存在:
id -nu 1000  # 应返回 "jenkins" 或其他用户名
# 如果不存在,需先创建用户并指定 UID:
sudo useradd -u 1000 -m jenkins
# 将 UID 1000 的用户加入 docker 组
sudo usermod -aG docker $(id -nu 1000)

# 查看 jenkins 是否有执行 docker ps 的权限
[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

# 如果要重新部署 jenkins 的话,需要先停止并删除之前已经部署的 jenkins
# 停止当前正在运行的 Jenkins 容器
docker stop jenkins
# 删除当前正在运行的 Jenkins 容器
docker rm jenkins

jenkins.yaml 文件修改

version: '3.8'

services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    user: "1000:992"
    ports:
      - "8080:8080"   # Jenkins Web UI 端口
      - "50000:50000" # Jenkins 分布式构建端口(可选)
    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: unless-stopped

volumes:
  jenkins_home:  # 定义一个名为 jenkins_home 的数据卷

docker run 命令更改

# jenkins 需要执行 docker 操作
# Docker 容器默认使用 UTC 时间,最简单的方法是将宿主机的时区文件挂载到容器中。这样容器会继承宿主机的时区设置。
# --user 在容器内以 UID=1000、GID=992 的用户身份运行 Jenkins
sudo docker run -d \
  --name jenkins \
  --restart unless-stopped \
  -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:992" \
  jenkins/jenkins:lts

(4)其它

# 1. 在 Jenkins 容器内生成 SSH 密钥,发布到其它服务器的时候可以用 ssh 连接
# 进入 Jenkins 容器
docker exec -it jenkins bash
# 生成 SSH 密钥对
mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""  # 无密码
# 2. 将公钥复制到目标服务器
# 示例: ssh-copy-id -i ~/.ssh/id_ed25519.pub root@192.168.31.110
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@target-server
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值