DevOps-Jenkins

news2024/9/29 11:29:40

Jenkins

Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
官网
在这里插入图片描述

应用场景

场景一在这里插入图片描述

  • 研发人员上传开发好的代码到github代码仓库
  • 需要将代码下载nginx服务器部署
  • 手动下载再部署/使用脚本下载在部署

场景二

在这里插入图片描述

下载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装

  • 静态IP(可以上外网)
  • 主机名
  • 关闭防火墙,SeLinux(脚本执行)
#!/bin/bash

# 关闭防火墙
echo "正在关闭防火墙..."
sudo systemctl stop firewalld
sudo systemctl disable firewalld
echo "防火墙已关闭并禁用。"

# 检查 SELinux 状态
sestatus=$(sestatus | grep "SELinux status" | awk '{print $3}')

if [ "$sestatus" == "enabled" ]; then
    # 关闭 SELinux
    echo "正在关闭 SELinux..."
    sudo setenforce 0
    sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    echo "SELinux 已关闭。"
else
    echo "SELinux 已经处于禁用状态,无需操作。"
fi

echo "脚本执行完毕。"

  • 时间同步
  • 确定OpenJdk安装
yum install java-1.8.0-openjdk* -y
  • 查看JDK版本
[root@workstation ~]# java -version
openjdk version "1.8.0_372"
OpenJDK Runtime Environment (build 1.8.0_372-b07)
OpenJDK 64-Bit Server VM (build 25.372-b07, mixed mode)
 


  • 上传 rpm包安装

[root@workstation ~]# rpm -ivh jenkins-2.150.3-1.1.noarch.rpm
warning: jenkins-2.150.3-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:jenkins-2.150.3-1.1              ################################# [100%]

  • 启动服务,查看端口
[root@workstation ~]# systemctl start jenkins
[root@workstation ~]# systemctl enable jenkins
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on

[root@workstation ~]# ps -aux | grep 8080
jenkins    7687 80.3 25.7 2359788 256212 ?      Ssl  09:49   0:32 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
root       7760  0.0  0.0 112708   972 pts/0    R+   09:50   0:00 grep --color=auto 8080





  • 查看密码文件里的密码(此为初始管理员用户admin的密码)。通过浏览器访问填上密码(服务器IP+端口8080)
[root@workstation ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
7c1491b0219849f981255179e9981bba

在这里插入图片描述

  • 选择安装推荐插件
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 进入主界面
    在这里插入图片描述

退出登录后密码问题

退出后,再次登录使用admin用户, 密码为cat /var/lib/jenkins/secrets/initialAdminPassword得到的字符串

如果需要修改密码
在这里插入图片描述
在这里插入图片描述

Git+GitHub+Jenkins

在这里插入图片描述

开发者电脑准备

yum install git -y
  • 创建密钥对

[root@servera ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -C "root@servera" -N ""

  • 在开发者电脑上查看并复制公钥
[root@servera ~]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDOHXkXsoYB1JtMJtXBeZrtcqsRRKBJEAzxGCoUyGM0B7SQYBQXaes4xTtQjOjJkL5HWQdaSelGGA8ySRjKuseIdYsPPcG5kxARkJ1+C6jJp3MamzuxJCjo2n3hmmopfB4f2eE3Kn5kbAUcmJRJfjUCgufsFjuY836Np9HNLqqYOuZCAKJEQm/IMTJgZ13aq/ss6VcA/+IikX4d/+PDsgYdNYSL8IxKiThfNlv3NIdOqNxAz2q4mFg2Vj9o1hvfnqGDIxuXyDGjVLZAW6bvJliJvJs3MfD7f4tn8gyFlArxPT0tMS7ePbxGBCBj2XC8qW9lcmrXD2163pbP/N6Io+CT root@servera

  • 将密钥公钥添加到github
    在这里插入图片描述

GitHub新建仓库

在这里插入图片描述
在这里插入图片描述

开发者提交文件测试

  • 免密登录地址
git@github.com:rkun0068/jenkins.git
  • 开发者电脑设置开发者身份
[root@servera ~]# git config --global user.name "servera"
[root@servera ~]# git config --global user.email "rkun18@outlook.com"

  • 克隆项目到开发者本地电脑上
[root@servera ~]# git clone git@github.com:rkun0068/jenkins.git

  • 提交测试代码
[root@servera ~]# cd jenkins/
[root@servera jenkins]# echo "Jenkins Test " >> README.md
[root@servera jenkins]# git add README.md
[root@servera jenkins]# git commit -m "add README.md"
[master (root-commit) eb74eb9] add README.md
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
[root@servera jenkins]# git branch
* master
[root@servera jenkins]# git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 228 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: To git@github.com:rkun0068/jenkins.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

  • 验证
    在这里插入图片描述

Nginx服务器准备

在Nginx服务器上安装Nginx,并启动服务

 yum install epel-release
 yum install nginx -y
 systemctl start nginx
 systemctl enable nginx

Jenkins安装插件

Jenkins图形确认安装git plugin和publish over ssh插件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置jenkins通过Publish Over SSH免密连接Nginx

  • 在jenkins服务器生产空密码 密钥对

[root@workstation ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -C "root@workstation" -N ""

  • 查看并复制私钥

[root@workstation ~]# cat ~/.ssh/id_rsa

  • 在jenkins中添加私钥
    在这里插入图片描述
    在这里插入图片描述
    点击Add,添加服务器配置
  • 在Jenkins服务器上配置对Nginx服务器的免密登录
#填上Nginx服务器IP地址
[root@workstation ~]# ssh-copy-id -i 192.168.182.132

  • 填写Nginx配置信息,测试连接成功后保存

在这里插入图片描述

添加Jenkins服务器公钥到GitHub

在这里插入图片描述

为Jenkins服务器添加凭据

凭据使Jenkins给字节构建项目授权使用的。
此文章中Jenkins通过SSH免密去找GitHub的项目仓库clone或pull项目代码。
但Jenkins服务本身不允许使用自己的私钥访问GitHub公钥,给凭据,让它可以实现功能就可以。

凭据是一种和第三方程序通讯的权限授权。本案例的凭据就是允许使用SSH免密。

可以使凭据在Jenkins里授权给任何需要SSH免密通讯的构建项目。

  • Jenkins界面添加凭据
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 添加凭据信息
    在这里插入图片描述
    在这里插入图片描述

Jenkins任务创建

  • 创建新任务
    在这里插入图片描述
  • 自定义任务名称与风格
    在这里插入图片描述
    在这里插入图片描述
  • 定义源码管理(如果URL错误,有可能使Jenkins服务器没有安装Git,Git安装即可)

在这里插入图片描述

  • 自定义构建方法和目标主机目录
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

手动构建

  • 立即构建
    在这里插入图片描述
  • 查看
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 查看控制台输出信息
    在这里插入图片描述
  • Nginx服务器验证是否被上传到Nginx家目录

[root@serverb ~]# ls /usr/share/nginx/html/
404.html  50x.html  en-US  icons  img  index.html  nginx-logo.png  poweredby.png  README.md 
#可以看到README.md被传过来了

自动发布系统

在这里插入图片描述

GitLab上创建新仓库

在这里插入图片描述
在这里插入图片描述

  • 开发者电脑clone创建好的项目

[root@servera ~]# git clone git@192.168.182.133:root/auto_build_web.git

[root@servera ~]# cd auto_build_web/
[root@servera auto_build_web]#

  • 开发者要产生ssh空密码密钥对,把公钥添加到gitlab

Jenkins安装对应插件

在这里插入图片描述

添加Jenkins服务器公钥到GitLab

  • Jenkins产生root用户SSH空密码密钥对
  • 添加公钥到GitLab
  • 复制GitLab上自动发布项目地址
  • 在Jenkins服务器上克隆仓库,确认连接OK

[root@workstation ~]# git clone git@192.168.182.133:root/auto_build_web.git

Jenkins创建自动构建任务

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
执行此脚本的是Jenkins服务器上的Jenkins用户

#!/bin/bash

#源目录为jenkins存放任务文件的目录 
SOURCE_DIR=/var/lib/jenkins/workspace/$JOB_NAME/
#目标目录为nginx服务器的家目录
DEST_DIR=/usr/share/nginx/html
#使用rsync同步源到nginx服务器家目录(需要免密登录),IP为nginx服务器IP
/usr/bin/rsync -av --delete $SOURCE_DIR root@192.168.182.132:$DEST_DIR

配置Jenkins服务器上Jenkins用户

[root@workstation ~]# grep jenkins /etc/passwd
jenkins:x:997:995:Jenkins Automation Server:/var/lib/jenkins:/bin/false
[root@workstation ~]# usermod -s /bin/bash jenkins
[root@workstation ~]# grep jenkins /etc/passwd
jenkins:x:997:995:Jenkins Automation Server:/var/lib/jenkins:/bin/bash

[root@workstation ~]# su - jenkins
-bash-4.2$ ssh-keygen -t rsa -C "jenkins user" -N ""

-bash-4.2$ ssh-copy-id -i root@192.168.182.132



Jenkins全局安全配置

在这里插入图片描述
在这里插入图片描述

配置GitLab运行本地网络使用WebHook

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为GitLab自动构建项目添加Webhook

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码自动发布测试

  • 开发者使用Git提交测试文件
[root@servera auto_build_web]# echo "auto_build_web" >> index.html
[root@servera auto_build_web]# git add index.html
[root@servera auto_build_web]# git commit -m "add index.html"
[master (root-commit) fddcaba] add index.html
 1 file changed, 1 insertion(+)
 create mode 100644 index.html
[root@servera auto_build_web]# git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 225 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)

To git@192.168.182.133:root/auto_build_web.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

[root@serverb ~]# cat /usr/share/nginx/html/index.html
auto_build_web

如果出现构建失败的情况很可能是某个主机rsync没有安装

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

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

相关文章

数据结构:快速的Redis有哪些慢操作?

redis 为什么要这莫快?一个就是他是基于内存的,另外一个就是他是他的数据结构 说到这儿,你肯定会说:“这个我知道,不就是 String(字符串)、List(列表)、 Hash&#xff08…

【雕爷学编程】MicroPython动手做(13)——掌控板之RGB三色灯2

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

Spring使用注解进行对象装配(DI)

文章目录 一. 什么是对象装配二. 三种注入方式1. 属性注入2. 构造方法注入3. Setter注入 三. 三种注入方式的优缺点四. 综合练习 通过五大类注解可以更便捷的将对象存储到 Spring 中,同样也可以使用注解将已经储存的对象取出来,直接赋值到注解所在类的一…

守护进程——后台服务进程

文章目录 什么是终端进程组会话关系相关函数守护进程创建步骤应用 什么是终端 echo $$:可以查看当前进程的进程号 进程组 会话》进程组》首进程 会话 关系 >:重定向 |:管道 wc -l:查找 &:在后台去运行 SID:会…

小学期笔记——天天酷跑3

画笔的载体是图层 图层的载体是窗体 效果: ------------------- 效果: ---------------------- 实现一个接口可以理解成添加一个能力 接口可以理解为能力的集合 对于abstract(判断:没有方法体),尽量使用…

linux系统上安装kail

1.虚拟机安装 加入kail镜像 kail系统的安装 2.更新kail的源 注释原本的源,加入阿里云的源 #阿里云 #deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib #deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib 参考&…

【计算机网络】11、网桥(bridge)、集线器(hub)、交换机(switch)、路由器(router)、网关(gateway)

文章目录 一、网桥(bridge)二、集线器(hub)三、交换机(switch)四、路由器(router)五、网关(gateway) 对于hub,一个包过来后,直接将包转发到其他口。 对于桥&…

【C++ 程序设计】实战:C++ 变量实践练习题

目录 01. 变量:定义 02. 变量:初始化 03. 变量:参数传递 04. 变量:格式说明符 ① 占位符 “%d” 改为格式说明符 “%llu” ② 占位符 “%d” 改为格式说明符 “%f” 或 “%e” 05. 变量:字节数统计 06. 变量&a…

[containerd] 在Windows上使用IDEA远程调试containerd, ctr, containerd-shim

文章目录 1. containerd安装2. 源码编译3. 验证编译的二进制文件是否含有调试需要的信息3.1. objdump工具验证3.2. file工具验证3.3. dlv工具验证 4. debug 1. containerd安装 [Ubuntu 22.04] 安装containerd 2. 源码编译 主要步骤如下: 1、从github下载containe…

MyBatis-Plus 查询PostgreSQL数据库jsonb类型保持原格式

文章目录 前言数据库问题背景后端返回实体对象前端 实现后端返回List<Map<String, Object>>前端 前言 在这篇文章&#xff0c;我们保存了数据库的jsonb类型&#xff1a;MyBatis-Plus 实现PostgreSQL数据库jsonb类型的保存与查询 这篇文章介绍了模糊查询json/json…

前端调用合约如何避免出现transaction fail

前言&#xff1a; 作为开发&#xff0c;你一定经历过调用合约的时候发现 gas fee 超出限制&#xff0c;但是不知道报了什么错。这个时候一般都是触发了require错误合约校验。对于用户来说他不理解为什么一笔交易会花费如此大的gas&#xff0c;那我们作为开发如何尽量避免这种情…

Power BI-网关设置与云端报表定时刷新(一)

网关的工作原理 网关是将本地数据传输至云端的桥梁&#xff0c;不仅Power BI能使用&#xff0c;其他微软软件也能够使用。 我们发布在云上的报表&#xff0c;发布后是静态的&#xff0c;不会自动刷新。需要通过网关设置定时刷新。 安装与设置 1.登录到Powerbi 在线服务–设置…

kaggle新赛:RSNA 2023 腹部创伤检测大赛赛题解析(CV)

赛题名称&#xff1a;RSNA 2023 Abdominal Trauma Detection 赛题链接&#xff1a; https://www.kaggle.com/competitions/rsna-2023-abdominal-trauma-detection 赛题背景 腹部钝力创伤是最常见的创伤性损伤类型之一&#xff0c;最常见的原因是机动车事故。腹部创伤可能导致…

大促之前全链路压测原理解析

1. 全链路压测的意义 上图为 2012 年淘宝核心业务应用关系的拓扑图&#xff0c;还不包含了其他的非核心业务应用&#xff0c;所谓的核心业务就是和交易相关的&#xff0c;和钱相关的业务&#xff0c;这张图大家可能看不清楚&#xff0c;看不清楚才是正常的&#xff0c;因为当时…

BGP实验

第一步&#xff1a;配置IP 第二步&#xff1a;写ospf 在R2&#xff0c;R3&#xff0c;R4&#xff0c;R5&#xff0c;R6&#xff0c;R7上分别配置ospf 如&#xff1a;R2 [R2]ospf 1 router-id 2.2.2.2 [R2-ospf-1]area 0 [R2-ospf-1-area-0.0.0.0]network 172.16.0.0 0.0.255…

wxwidgets Ribbon构建多个page与按钮响应

新建一个控制台应用程序&#xff0c;添加好头文件的依赖与lib库文件的依赖&#xff0c;修改属性&#xff1a; 将进入ribbon界面的文件与主界面的类分开&#xff1a; 1、RibbonSample.cpp #include "stdafx.h" #include "MyFrame.h" class MyApp : public…

谷粒商城第六天-商品服务之分类管理下的获取三级分类树形列表

目录 一、总述 1.1 前端思路 1.2 后端思路 二、前端部分 2.1 在网页中建好目录及菜单 2.1.1 建好商品目录 2.1.2 建好分类管理菜单 ​编辑 2.2 编写组件 2.2.1 先完成组件文件的创建 2.2.2 编写组件 2.2.2.1 显示三级分类树形列表 三、后端部分 3.1 编写商品分类…

二十章:基于弱监督语义分割的亲和注意力图神经网络

0.摘要 弱监督语义分割因其较低的人工标注成本而受到广泛关注。本文旨在解决基于边界框标注的语义分割问题&#xff0c;即使用边界框注释作为监督来训练准确的语义分割模型。为此&#xff0c;我们提出了亲和力注意力图神经网络&#xff08;A2GNN&#xff09;。按照先前的做法&a…

NO1.使用命令行创建Maven工程

①在工作空间目录下打开命令窗口 ②使用命令行生成Maven工程 mvn archetype:generate 运行 MVN 原型&#xff1a;生成命令,下面根据提示操作 选择一个数字或应用过滤器&#xff08;格式&#xff1a;[groupId&#xff1a;]artifactId&#xff0c;区分大小写包含&#xff09;&a…

阿里云服务器全方位介绍_优势_使用_租用费用详解

阿里云服务器全方位介绍包括云服务器ECS优势、云服务器租用价格、云服务器使用场景及限制说明&#xff0c;阿里云服务器网分享云服务器ECS介绍、个人和企业免费试用、云服务器活动、云服务器ECS规格、优势、功能及应用场景详细你说明&#xff1a; 目录 什么是云服务器ECS&…