CentOS 7.9 安装 Jenkins

news2024/11/14 15:16:59

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/

image-20230622222946408

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、安装插件

image-20230622223129352

5、创建管理员用户

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

image-20230622230545848

6、完成安装

后续步骤下一步即可

image-20230622230739785

四、功能测试

1、新建一个任务

第一步:新建 item

image-20230622230925420

第二步:添加命令

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

docker -v
docker pull node:latest

image-20230622231117523

第三步:保存,立即构建

image-20230622231210101

第四步:报错:无权限

image-20230622231249197

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

立即构建

image-20230622233548479

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/675473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TypeScript ~ TS 掌握自动编译命令 ③

作者 : SYFStrive 博客首页 : HomePage 📜: TypeScript ~ TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &…

锐捷睿易:云端绑定别人账号,命令方式解绑

一、适用场景 云端绑定了别人的账号,但又不能让他解绑,只能自己解绑从新绑定自己MACC 前提:需要设备联网状态才可以解绑 二、配置步骤 1、登录macc,首页点击设备解绑 2、输入收集的设备序列号,点击获取专属URL&…

chatgpt赋能python:Python清空console的方法

Python清空console的方法 随着Python的应用越来越广泛,我们经常会遇到需要清空Python console的情况。比如,我们可能需要重新开始一段代码的执行,或者想要隐藏过去的交互记录。在这篇文章中,我们将介绍几种方法来清空Python cons…

安装配置nvm-windows对Node.js与npm进行版本控制

一、nvm 由于Node.js版本原因,可能会出现一些错误,如IDEA中Node.js环境下npm报错Error:0308010C:digital envelope routines:unsupported。而且不同的项目,所采用的Node.js的版本不同,重新卸载安装配置,太过繁琐。所以…

chatgpt赋能python:Python求加速度:从计算机视觉到自动驾驶

Python求加速度:从计算机视觉到自动驾驶 在计算机视觉、自动驾驶和机器人等领域,求加速度是常见的任务。Python是一种强大的编程语言,可以用于快速、简便地求解加速度。本篇文章将介绍如何在Python中求解加速度,并探讨加速度在实…

【无标题】很有趣的一个个CSS小球下落动画

代码如下 <!-- 两个div --> <div class"ball"></div> <div class"ground"></div>.ball {width: 30px;height: 30px;background-color: black;border-radius: 50%;position: relative;left: 90px;animation: failing 0.5s ea…

leetcode64. 最小路径和(动态规划-java)

最小路径和 leetcode64. 最小路径和题目描述 暴力递归 缓存代码演示 动态规划代码演示空间压缩代码演示 动态规划专题 leetcode64. 最小路径和 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/minimum-path-sum 题目描…

C高级6.23

一.整理用户相关的指令、整理磁盘相关的指令 用户相关的指令&#xff1a; 1.id -u 查看用户ID 2.id -g 查看组ID 3.whoami 查看用户名 4.sudo adduser 用户名 创建用户 5.给新用户添加sudo权限 给新用户添加sudo权限的步骤&a…

Spring 与 Servlet-1

整合 Spring 和 Servlet DAO 使用 JDBC 通过模板类进行整合&#xff0c;模板类由 Spring 框架提供&#xff0c;只需进行配置即可 1、依赖&#xff1a;spring-jdbc 和连接池 druid、数据库驱动 mysql-connect-java 2、引入了 IoC、DI 后对象的创建完全交给 Spring 负责&#…

chatgpt赋能python:求1-3+5-7:用Python解决这个算术问题

求1-35-7: 用Python解决这个算术问题 介绍 在Python编程领域中&#xff0c;算术问题是我们经常会遇到的。今天&#xff0c;我们将介绍如何用Python求1-35-7这个算式的结果。这个问题看起来很简单&#xff0c;但如果你是初学者&#xff0c;可能会有点难以理解。不必担心&#…

嵌入式中编写可移植 C/C++ 程序的要点方法

以前做过两年 C 程序移植工作&#xff0c;从 Win32 平台移植到 Linux 平台。大约有上百万行 C/C代码&#xff0c;历时一年多。 在开发 Win32 版本时&#xff0c;已经强调了程序的可植性&#xff0c;无奈 Win32 团队里对 Linux 精通的人比较少&#xff0c;很多问题没有想到&…

InstructGPT论文解读

介绍 上图可以看出InstructGPT(PPO-ptx)及变体&#xff08;variant trained without pretraining mix&#xff09;(PPO)显著优于GPT&#xff0c;1.3B的InstructGPT优于175B的GPT&#xff0c;SFT作为RLHF第一阶段的模型效果比GPT好。当然结果是由人来评价的。 RLHF包含三个步骤…

多EIP下的UDP通信异常分析

背景 SRE和程序在测试DDos多EIP防御方案的过程中&#xff0c;发现多EIP模式下, 监听的UDP端口连接会出现客户端访问异常。 表现为客户端发送一次数据后服务端这边主动断开了&#xff0c;或是客户端和服务端同时断开。 该问题会导致业务在多EIP方案下无法达到预期效果&#xff0…

【Visual Studio】Qt 获取系统时间,并实时更新时间,使用 C++ 语言,配合 Qt 开发串口通信界面

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 这个需求来源于这个工程&#xff1a;【Visual Studio】Qt 的实时绘图曲线功能&#xff0c;使用 C 语言&#xff0c;配合 Qt 开发串口通信界面。 文章目录 Qt…

chatgpt赋能python:Python求和1-100的方法

Python求和1-100的方法 Python语言简介 Python是一个广泛使用的高级编程语言&#xff0c;其设计哲学强调代码可读性和语法简洁性。Python语言作为一门多范式的编程语言&#xff0c;支持对象、函数式和结构化编程等多种形式。Python应用领域广泛&#xff0c;如机器学习、桌面应…

chatgpt赋能python:Python求1!:介绍

Python求1!&#xff1a;介绍 在Python编程中&#xff0c;阶乘是一个常见的数学运算。阶乘指定的数的所有小于或等于其本身的正整数之积&#xff0c;例如&#xff0c;1!等于1&#xff0c;2&#xff01;等于2乘以1&#xff0c;3!等于3乘以2乘以1&#xff0c;以此类推。 在这篇文…

【工程项目管理】工程项目管理实践报告

前言&#xff1a; 1.大学课程的大作业&#xff0c;觉得存起来也没什么用就干脆发出来了。。。 2.很可能有不严谨之处&#xff0c;各位看官如若发现欢迎指出~ 创作者文章管理系统 1 实践环节作业1&#xff1a;选题及任务分解WBS &#xff08;1&#xff09;选题 a.项目名称&a…

【1 beego学习 -MAC框架与ORM数据库】

0 beego的启动流程 1 入口 package mainimport ( //全局使用的路由和models_ "studyDemo/models"_ "studyDemo/routers"beego "github.com/beego/beego/v2/server/web" )func main() {beego.Run() }2 根据请求路由加载对应的控制器 package r…

【计算机组成原理】微程序控制器

目录 一、微程序控制器概述 二、微程序控制器设计方法 三、微指令执行过程 四、控制字段的编码方式 五、下址字段的设计方法 六、微程序入口地址的产生方法 一、微程序控制器概述 微程序&#xff1a;微指令构成的有序集合&#xff0c;一条指令对应一段微程序 微指令&…

【小沐学Android】Material Design设计规范之颜色篇

文章目录 1、简介1.1 Android1.2 Material Design 2、Material Design 12.1 材料设计2.2 颜色 3、Material Design 23.1 材料系统3.2 颜色 4、Material Design 34.1 颜色样式4.2 配色方案4.3 Material Theme Builder 结语 1、简介 1.1 Android 谷歌在2007年发布了第一个测试版…