CentOS 7.9 安装 Jenkins


文章目录

  • CentOS 7.9 安装 Jenkins
  • 一、概述
  • 二、安装
  • 1、安装 OpenJDK
  • 2、安装 Jenkins
  • 3、启动 Jenkins
  • 4、给 Jenkins 放行端口
  • 三、初始化 Jenkins 配置
  • 1、访问
  • 2、解锁 Jenkins
  • 3、配置清华大学的源地址
  • 4、安装插件
  • 5、创建管理员用户
  • 6、完成安装
  • 四、功能测试
  • 1、新建一个任务
  • 第一步:新建 item
  • 第二步:添加命令
  • 第三步:保存,立即构建
  • 第四步:报错:无权限
  • 2、Unix Socket 权限问题
  • 说明
  • 将 jenkins 添加到 docker 用户组
  • 重启 jenkins
  • 立即构建


一、概述

Jenkins 是一个基于 Java 语言开发的持续构建工具平台,主要用于持续、自动的构建/测试你的软件和项目。它可以执行你预先设定好的设置和构建脚本,也可以和 Git 代码库做集成,实现自动触发和定时触发构建。

二、安装

1、安装 OpenJDK

因为 JenkinsJava 编写的持续构建平台,所以安装 Java 必不可少。

在这里,我们选择安装开源的 openjdk 即可。 openjdkSunJDK 一种开源实现。关于openjdkSunJDK 的具体区别可以看下面的文章了解下。在这我们直接使用 yum 包管理器安装 openjdk 即可。

# 安装 java
yum install -y fontconfig java-11-openjdk

# 检查 java 版本
[root@localhost ~]# java -version
openjdk version "11.0.19" 2023-04-18 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.19.0.7-1.el7_9) (build 11.0.19+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.19.0.7-1.el7_9) (build 11.0.19+7-LTS, mixed mode, sharing)

2、安装 Jenkins

https://pkg.jenkins.io/redhat-stable/

由于 Yum 源不自带 Jenkins 的安装源,于是我们需要自己导入一份 Jenkins 安装源进行安装。导入后,使用 Yum 命令安装即可。

# 使用 wget 下载 Jenkins 软件包的存储库配置文件,并将其保存到 /etc/yum.repos.d/jenkins.repo 文件中
# 证书过期,不检查证书:sudo wget --no-check-certificate -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
# 使用 rpm 导入 Jenkins 软件包的 GPG 密钥,以确保安装的软件包是经过验证的,并且没有被篡改过
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
# 安装 EPEL 的发行包,通过安装 EPEL 发行包,您可以访问一些常用的第三方软件包
yum install epel-release
# 使用 yum 安装 Jenkins 软件包
yum install -y jenkins

3、启动 Jenkins

service jenkins start
# service jenkins restart restart 重启 Jenkins
# service jenkins restart stop 停止 Jenkins

4、给 Jenkins 放行端口

在启动 Jenkins 后,此时 Jenkins 会开启它的默认端口 8080 。但由于防火墙限制,我们需要手动让防火墙放行 8080 端口才能对外访问到界面。

这里我们在 CentOS 下的 firewall-cmd 防火墙添加端口放行规则,添加完后重启防火墙。

firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=50000/tcp --permanent

systemctl reload firewalld

三、初始化 Jenkins 配置

1、访问

http://192.168.10.130:8080/

CentOS 7.9 安装 Jenkins_docker

2、解锁 Jenkins

查看密码

cat /var/lib/jenkins/secrets/initialAdminPassword

3、配置清华大学的源地址

因为 Jenkins 插件服务器在国外,所以速度不太理想。我们需要更换为清华大学的 Jenkins 插件源后,再安装插件,所以先不要点安装插件。

更换方法很简单。进入服务器,将 /var/lib/jenkins/updates/default.json 内的插件源地址替换成清华大学的源地址,将 google 替换为 baidu 即可。

sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /var/lib/jenkins/updates/default.json

4、安装插件

CentOS 7.9 安装 Jenkins_docker_02

5、创建管理员用户

这里点击“使用admin账户继续”,此时密码还是默认密码:cat /var/lib/jenkins/secrets/initialAdminPassword

CentOS 7.9 安装 Jenkins_jenkins_03

6、完成安装

后续步骤下一步即可

CentOS 7.9 安装 Jenkins_Jenkins_04

四、功能测试

1、新建一个任务

第一步:新建 item

CentOS 7.9 安装 Jenkins_jenkins_05

第二步:添加命令

找到 构建 一项,选择 增加构建步骤,选择 执行shell ,输入以下命令

docker -v
docker pull node:latest

CentOS 7.9 安装 Jenkins_运维_06

第三步:保存,立即构建

CentOS 7.9 安装 Jenkins_jenkins_07

第四步:报错:无权限

CentOS 7.9 安装 Jenkins_运维_08

Started by user admin
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/hello-jenkins
[hello-jenkins] $ /bin/sh -xe /tmp/jenkins6376592547251823106.sh
+ docker -v
Docker version 24.0.2, build cb74dfc
+ docker pull node:latest
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=node&tag=latest": dial unix /var/run/docker.sock: connect: permission denied
Build step 'Execute shell' marked build as failure
Finished: FAILURE

2、Unix Socket 权限问题

说明

docker 的架构是 C/S 架构。在我们使用 docker 命令时,其实是命令使用 socketdocker 的守护进程进行通信,才能正常执行 docker 命令。

而在 Linux 中, Unix socket 属于 root 用户,因此需要 root 权限才能访问。官方是这么解释的:

Manage Docker as a non-root user The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can only access it using sudo. The docker daemon always runs as the root user. If you don’t want to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.

以非root用户管理Docker Docker守护进程绑定到一个Unix套接字而不是TCP端口。默认情况下,该Unix套接字的所有者是root用户,其他用户只能通过sudo来访问它。Docker守护进程始终以root用户身份运行。如果您不想在使用docker命令时使用sudo,可以创建一个名为docker的Unix用户组,并将用户添加到其中。当docker守护进程启动时,它会将Unix套接字的所有权设置为docker用户组的读写权限。

但是在 docker 中, docker 提供了一个 用户组 的概念。我们可以将执行 Shell 的用户添加到名称为 docker 的用户组,则可以正常执行 docker 命令。

将 jenkins 添加到 docker 用户组

而在 Jenkins 中执行的终端用户做 jenkins ,所以我们只需要将 jenkins 加入到 docker 用户组即可:

sudo groupadd docker          #新增docker用户组
sudo gpasswd -a jenkins docker  #将当前用户添加至docker用户组
newgrp docker                 #更新docker用户组

重启 jenkins

sudo service jenkins restart

立即构建

CentOS 7.9 安装 Jenkins_Jenkins_09

Started by user admin
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/hello-jenkins
[hello-jenkins] $ /bin/sh -xe /tmp/jenkins1917769180207902795.sh
+ docker -v
Docker version 24.0.2, build cb74dfc
+ docker pull node:latest
latest: Pulling from library/node
0e29546d541c: Pulling fs layer
9b829c73b52b: Pulling fs layer
cb5b7ae36172: Pulling fs layer
......
6f9f74896dfa: Pull complete
f2930ff7fb60: Pull complete
c1d26179dd86: Pull complete
1fa56dd41537: Pull complete
321141c774e9: Pull complete
Digest: sha256:36aca218a5eb57cb23bc790a030591382c7664c15a384e2ddc2075761ac7e701
Status: Downloaded newer image for node:latest
docker.io/library/node:latest
Finished: SUCCESS