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# 关闭 SELinuxecho "正在关闭 SELinux..."sudo setenforce 0sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/configecho "SELinux 已关闭。"
elseecho "SELinux 已经处于禁用状态,无需操作。"
fiecho "脚本执行完毕。"
  • 时间同步
  • 确定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.md1 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-releaseyum install nginx -ysystemctl start nginxsystemctl 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.html1 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.mzph.cn/news/13546.shtml

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

相关文章

递归实现 组合问题+排列问题(DFS)

目录 递归实现排列型枚举 递归实现排列类型枚举 II 递归实现组合型枚举 递归实现组合型枚举 II 递归实现指数型枚举 递归实现指数型枚举 II 递归不是循环,递归利用了系统栈,只要是函数都会被系统管理。当执行到函数地址入口时就会为函数在系统栈上分…

mac 删除自带的ABC输入法保留一个搜狗输入法,搜狗配置一下可以减少很多的敲击键盘和鼠标点击次数

0. 背景 对于开发者来说,经常被中英文切换输入法所困扰,我这边有一个方法,删除mac默认的ABC输入法 仅仅保留搜狗一个输入法,配置一下搜狗输入:哪些指定为英文输入,哪些指定为中文输入(符号也可…

wps图表怎么改横纵坐标,MLP 多层感知器和CNN卷积神经网络区别

目录 wps表格横纵坐标轴怎么设置? MLP (Multilayer Perceptron) 多层感知器 CNN (Convolutional Neural Network) 卷积神经网络 多层感知器MLP,全连接网络,DNN三者的关系 wps表格横纵坐标轴怎么设置? 1、打开表格点击图的右侧…

arm 函数栈回溯

大概意思就是arm每个函数开始都会将PC、LR、SP以及FP四个寄存器入栈。 下面我们看一下这四个寄存器里面保存的是什么内存 arm-linux-gnueabi-gcc unwind.c -mapcs -w -g -o unwind&#xff08;需要加上-mapcs才会严格按照上面说的入栈&#xff09; #include <stdio.h> …

Android 面试题 线程间通信 六

&#x1f525; 主线程向子线程发送消息 Threadhandler&#x1f525; 子线程中定义Handler&#xff0c;Handler定义在哪个线程中&#xff0c;就跟那个线程绑定&#xff0c;在线程中绑定Handler需要调用Looper.prepare(); 方法&#xff0c;主线程中不调用是因为主线程默认帮你调用…

怎么在线修改图片?分享一个图片修改工具

无论是在个人或商业领域&#xff0c;我们都需要使用高质量的图片来传达信息或提高品牌形象。大尺寸的图片也会占据大量的存储空间和带宽&#xff0c;影响网站的加载速度和用户体验。因此&#xff0c;我们需要一种高效的工具来解决这个问题。今天向大家介绍一款非常实用的图片处…

Abaqus 导出单元刚度矩阵和全局刚度矩阵

Abaqus 导出单元刚度矩阵和全局刚度矩阵 首次创建&#xff1a;2023.7.29 最后更新&#xff1a;2023.7.29 如有什么改进的地方&#xff0c;欢迎大家讨论&#xff01; 详细情况请查阅&#xff1a;Abaqus Analysis User’s Guide 一、Abaqus 导出单元刚度矩阵 1.生成单元刚度矩阵…

Linux CentOS快速安装VNC并开启服务

以下是在 CentOS 上安装并开启 VNC 服务的步骤&#xff1a; 安装 VNC 服务器软件包。运行以下命令&#xff1a; sudo yum install tigervnc-server 输出 $ sudo yum install tigervnc-server Loaded plugins: fastestmirror, langpacks Repository epel is missing name i…

教雅川学缠论04-笔

笔由3部分组成&#xff1a; 顶分型K线底分型&#xff0c;或者 底分型K线顶分型 注意&#xff1a;笔加一起至少7根K线&#xff0c;因为一个底分型至少3根&#xff0c;K先至少1个&#xff0c;顶分型至少3根 下图中红色线段就是一个标准的笔&#xff0c;它始于一个底分型&#xff…

Visual C++中的虚函数和纯虚函数(以外观设计模式为例)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来说说Visual C中的虚函数和纯虚函数。该系列帖子全部使用我本人自创的对比学习法。也就是当C学不下去的时候&#xff0c;就用JAVA实现同样的代码&#xff0c;然后再用对比的方法把C学会。 直接说虚函数…

【SpringCloud Alibaba】(四)使用 Feign 实现服务调用的负载均衡

在上一文中&#xff0c;我们实现了服务的自动注册与发现功能。但是还存在一个很明显的问题&#xff1a;如果用户微服务和商品微服务在服务器上部署多份的话&#xff0c;之前的程序无法实现服务调用的负载均衡功能。 本文就带着大家一起实现服务调用的负载均衡功能 1. 负载均衡…

LayUi 树形组件tree 实现懒加载模式,展开父节点时异步加载子节点数据

如题。 效果图&#xff1a; //lazy属性为true&#xff0c;点开时才加载 引用代码&#xff1a; <link href"~/Content/layui-new/css/layui.css" rel"stylesheet" /><form id"form" class"layui-form" style"margin-to…

AC695-按键处理-带UI

AC695-按键修改 消息发出 对应界面处理

【算法和数据结构】257、LeetCode二叉树的所有路径

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;首先看这道题的输出结果&#xff0c;是前序遍历。然后需要找到从根节点到叶子节点的所有路径&#xff…

【图论】树上差分(点差分)

一.题目 输入样例&#xff1a; 5 10 3 4 1 5 4 2 5 4 5 4 5 4 3 5 4 3 4 3 1 3 3 5 5 4 1 5 3 4 输出样例&#xff1a;9 二 .分析 我们可以先建一棵树 但我们发现&#xff0c;这样会超时。 所以&#xff0c;我们想到树上差分 三.代码 /* 5 10 3 4 1 5 4 2 5 4 5 4 5 4 3 5 …

IOS UICollectionView 设置cell大小不生效问题

代码设置flowLayout.itemSize 单元格并没有改变布局大小&#xff0c; 解决办法如下图&#xff1a;把View flow layout 的estimate size 设置为None&#xff0c;上面设置的itemSize 生效了。

物联网阀控水表计量准确度如何?

物联网阀控水表是一种新型的智能水表&#xff0c;它采用了先进的物联网技术&#xff0c;可以通过远程控制和监测水表的运行情况&#xff0c;实现更加精准的水量计量和费用结算。那么&#xff0c;物联网阀控水表的计量准确度如何呢&#xff1f;下面我们将从以下几个方面进行详细…

PHP 3des加解密新旧方法可对接加密

一、旧3des加解密方法 <?php class Encrypt_3DES {//加密秘钥&#xff0c;private $_key;private $_iv;public function __construct($key, $iv){$this->_key $key;$this->_iv $iv;}/*** 对字符串进行3DES加密* param string 要加密的字符串* return mixed 加密成…

【SpringⅢ】Spring 的生命周期

目录 &#x1f96a;1 Bean 的作用域 &#x1f969;1.1 singleton&#xff1a;单例模式 &#x1f359;1.2 prototype&#xff1a;原型模式 &#x1f371;1.3 Bean 的其他作用域 &#x1f35c;2 Spring 生命周期(执行流程) &#x1f958;2.1 启动容器 &#x1f372; 2.2 读…

[小尘送书-第二期]《从零开始读懂量子力学》由浅入深,解释科学原理;从手机到超导,量子无处不在;从微观到宏观,遐想人生的意义!

大家好&#xff0c;我是小尘&#xff0c;欢迎关注&#xff0c;一起交流学习&#xff01;欢迎大家在CSDN后台私信我&#xff01;一起讨论学习&#xff0c;讨论如何找到满意的工作&#xff01; 本文目录 一、前言二、作者简介三、内容简介四、抽奖方式五、名家推介写在最后 一、前…