DevOps-Jenkins

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没有安装

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++之poll与epoll总结(一百六十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

优化基于tcp,socket的ftp文件传输程序

原始程序: template_ftp_server_old.py: import socket import json import struct import os import time import pymysql.cursorssoc socket.socket(socket.AF_INET, socket.SOCK_STREAM) HOST 192.168.31.111 PORT 4101 soc.bind((HOST,PORT)) p…

MVC与MVVM模式的区别

一、MVC Model(模型):用于处理应用程序数据逻辑,负责在数据库中存取数据。处理数据的crud View(视图):处理数据显示的部分。通常视图是依据模型数据创建的。 Controller(控制器&…

25.6 matlab里面的10中优化方法介绍—— 遗传算法(matlab程序)

1.简述 遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解(所找到的解是全局最优解)的方法。 参数编码、初始群体的设定…

Generative Diffusion Prior for Unified Image Restoration and Enhancement 论文阅读笔记

这是CVPR2023的一篇用diffusion先验做图像修复和图像增强的论文 之前有一篇工作做了diffusion先验(Bahjat Kawar, Michael Elad, Stefano Ermon, and Jiaming Song, “Denoising diffusion restoration models,” arXiv preprint arXiv:2201.11793, 2022. 2, 4, 6,…

【万字长文】SpringBoot整合SpringSecurity+JWT+Redis完整教程(提供Gitee源码)

前言:最近在学习SpringSecurity的过程中,参考了很多网上的教程,同时也参考了一些目前主流的开源框架,于是结合自己的思路写了一个SpringBoot整合SpringSecurityJWTRedis完整的项目,从0到1写完感觉还是收获到不少的&…

前端,js , Error in created hook: TypeError ,有bug了

怎么兄弟,遇到bug了???你开心吗,哈哈哈哈

论文笔记--Skip-Thought Vectors

论文笔记--Skip-Thought Vectors 1. 文章简介2. 文章概括3 文章重点技术3.1 Skip Thought Vectors3.2 词表拓展 4. 文章亮点5. 原文传送门6. References 1. 文章简介 标题:Skip-Thought Vectors作者:Ryan Kiros, Yukun Zhu, Ruslan Salakhutdinov, Rich…

7.28 作业 QT

手动完成服务器的实现&#xff0c;并具体程序要注释清楚: widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QMessageBox> //对话框类 #include …

乐划锁屏充分发挥强创新能力,打造内容业新生态

乐划锁屏作为新型内容媒体,在这一市场有着众多独特的优势,不仅能够通过多场景的联动给内容创作者带来了更多可能性,还促进了更多优质作品的诞生,为用户带来更加丰富多彩的锁屏使用体验。 作为OPPO系统原生的OS应用,乐划锁屏一直致力于打造为用户提供至美内容的内容平台,吸引了全…

ETHERNET/IP转RS485/RS232网关什么是EtherNet/IP?

网络数据传输遇到的协议不同、数据互通麻烦等问题&#xff0c;一直困扰着大家。然而&#xff0c;现在有一种神器——捷米JM-EIP-RS485/232&#xff0c;它将ETHERNET/IP网络和RS485/RS232总线连接在一起&#xff0c;让数据传输更加便捷高效。 那么&#xff0c;它是如何实现这一功…

解决 tensorflow 出现的 ImportError: Could not find the DLL(s) ‘msvcp140_1.dll‘. 问题

在安装完tensorflow库后出现 问题详述&#xff1a; ImportError: Could not find the DLL(s) msvcp140_1.dll. TensorFlow requires that these DLLs be installed in a directory that is named in your %PATH% environment variable. You may install these DLLs by downlo…

FS32K144官方提供串口Bootloader对接Matlab串口烧写程序

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ 前言 Bootloader升级工具&#xff1a;可用TTL、232、485&#xff08;硬件收发模式&#xff09;,其中的一种&#x…

K8s-资源管理(二)

文章目录 2. 资源管理2.1 资源管理介绍2.2 YAML语言介绍2.3 资源管理方式2.3.1 命令式对象管理2.3.2 命令式对象配置2.3.3 声明式对象配置 2.4. 模拟使用普通用户来操作2.5 kubectl 一些基本命令2.6 使用个人的 docker 仓库的镜像 2. 资源管理 2.1 资源管理介绍 在kubernetes…

JMM是如何保证原子性呢?

3.3.1加锁 锁是一种通用技术&#xff0c;比如Java提供的Synchronized关键字就是锁的一种实现&#xff0c;Synchronized是排他锁/独占锁&#xff0c;就是有你没我的意思&#xff0c;只要其他线程到来访问&#xff0c;发现锁还未释放&#xff0c;就要在外面等待&#xff0c;因为S…

linux系统下(centos7.9)安装Jenkins全流程

一、卸载历史版本 # rpm卸载 rpm -e jenkins# 检查是否卸载成功 rpm -ql jenkins# 彻底删除残留文件 find / -iname jenkins | xargs -n 1000 rm -rf二、环境依赖安装 yum -y install epel-releaseyum -y install daemonize三、安装Jenkins Jenkins官网传送带&#xff1a; …

Nginx配置WebSocket反向代理

1、WebSocket协议 ​ WebSocket协议相比较于HTTP协议成功握手后可以多次进行通讯&#xff0c;直到连接被关闭。但是WebSocket中的握手和HTTP中的握手兼容&#xff0c;它使用HTTP中的Upgrade协议头将连接从HTTP升级到WebSocket。这使得WebSocket程序可以更容易的使用现已存在的…

微服务入门---SpringCloud(一)

微服务入门---SpringCloud&#xff08;一&#xff09; 1.认识微服务1.0.学习目标1.1.单体架构1.2.分布式架构1.3.微服务1.4.SpringCloud1.5.总结 2.服务拆分和远程调用2.1.服务拆分原则2.2.服务拆分示例2.2.1.导入Sql语句2.2.2.导入demo工程 2.3.实现远程调用案例2.3.1.案例需求…

【Koa】[NoSQL] Koa中相关介绍和使用Redis MongoDB增删改查

目录 NoSQL非关系型数据库关系型数据库&#xff08;RMDB&#xff09;介绍非关系型数据库&#xff08;NoSQL&#xff09;介绍Redis & MongoDB 在 Koa 中使用 Redis (了解)Redis 的安装和使用在 Koa 中连接 和 调用 Redis 在 Koa 中使用 MongoDBMongoDB 的安装MongoShell 操作…

【Spring框架】SpringBoot配置文件

目录 配置文件作用application.properties中午乱码问题&#xff1a;配置文件里面的配置类型分类SpringBoot热部署properties基本语法properties配置文件的优缺点&#xff1a;yml配置文件说明yml基本语法配置对象properties VS yml 配置文件作用 整个项⽬中所有重要的数据都是在…