安装 Jenkins

方式一、使用 rpm 包安装

清华大学开源软件镜像站
rpm包地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.492.3-1.1.noarch.rpm

# 下载完 rpm 包后放到 linux root 目录下
# Jenkins 需要 Java 运行环境
# 列出系统中所有与 JDK(Java 开发工具包)相关的软件包
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 版本控制系统软件
dnf install git -y
# 设置 Jenkins 开机自启
systemctl enable jenkins
# 开启 Jenkins 服务
systemctl start jenkins

# 访问 http://192.168.31.112:8080/ (虚拟机ip地址,端口号8080)
# 查看登陆密码
cat /var/lib/jenkins/secrets/initialAdminPassword
# 检查系统中是否存在名为 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

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

# 以 jenkins 用户身份执行 shell,然后执行 docker ps,可以查看 jenkins 是否有权限执行 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
# 列出当前系统中所有可安装的 docker-ce 版本,并按照版本号从高到低进行排序,同时显示重复的版本。
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、内存资源
# 创建目录,存放 docker 的配置文件
mkdir /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://qa9ktbtj.mirror.aliyuncs.com",
    "https://docker.m.daocloud.io",
    "https://docker.mirrors.ustc.edu.cn",
    "https://www.daocloud.io/mirror"
  ]
}
EOF
# 设置 docker 开机自启
systemctl enable docker
# 启动 docker
systemctl start docker
# 查看 docker 状态
systemctl status docker
2、下载 jenkins
docker pull jenkins/jenkins:lts
3、安装 jenkins

方式 1: 使用 Docker 直接运行

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

# 需要执行 docker 操作
# Docker 容器默认使用 UTC 时间,最简单的方法是将宿主机的时区文件挂载到容器中。这样容器会继承宿主机的时区设置。
# --user 查看下面备注
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 目录下创建 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: always  # 容器崩溃时自动重启

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

# 浏览器中访问 http://192.168.31.112:8080

# 查看 jenkins 管理员密码
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

备注:当 jenkins 中添加的任务需要执行 docker 命令的时候,需要执行下面的命令

# 获取宿主机的 docker 组 GID
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
# 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
# jenkins.yaml 内容添加 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 分布式构建端口(可选)
    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 的数据卷
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容