Jenkins高级管理

一、CI/CD和DevOps介绍

DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

它是一种重视"软件开发人员(Dev)"和"IT运维技术人员(Ops)"之间沟通合作的文化、运动或惯例。通过自动化"软件交付"和"架构变更"的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运维工作必须紧密合作。

持续集成(Continuous Integration,CI):

代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈

持续交付(Continuous Delivery,CD):

部署到生产环境,给用户使用

持续部署(Continuous Deployment,CD):

部署到生产环境

二、部署Git版远程仓库

2.1、系统环境要求

|-----------------|-----------------|--------------|
| 主机名 | IP地址 | 备注信息 |
| Git | 192.168.200.111 | Git服务器 |
| Jenkins | 192.168.200.112 | Jenkins服务器 |

系统初始化

bash 复制代码
[root@localhost ~]# hostname Git

[root@localhost ~]# bash

[root@Git ~]# iptables -F

[root@Git ~]# setenforce 0

[root@Git ~]# systemctl stop firewalld


[root@localhost ~]# hostname Jenkins

[root@localhost ~]# bash

[root@Jenkins ~]# iptables -F

[root@Jenkins ~]# setenforce 0

[root@Jenkins ~]# systemctl stop firewalld

2.2、部署Git远程仓库

安装Git

bash 复制代码
[root@Git ~]# yum -y install git

创建Git账户

bash 复制代码
[root@Git ~]# useradd git

[root@Git ~]# echo "123456" | passwd --stdin git

[root@Git ~]# su - git

创建Git远程仓库

bash 复制代码
[git@Git ~]# mkdir repos #创建Git仓库目录

[git@Git ~]# cd repos/

[git@Git repos]# mkdir app.git #创建app的项目目录

[git@Git repos]# cd app.git

[git@Git app.git]# git --bare init #--bare创建一个裸仓库

初始化空的 Git 版本库于 /root/repos/app.git/


[git@Git app.git]# ls

branches  config  description  HEAD  hooks  info  objects  refs

说明:

使用git --bare init方法创建一个所谓的裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果你硬要操作的话,只会得到下面的错误("This operation must be run in a work tree")

bash 复制代码
[git@Git app.git]# git status

fatal: This operation must be run in a work tree

2.3、git客户端远程推送测试

安装Git

bash 复制代码
[root@Jenkins ~]# yum -y install git

创建一个目录,尝试git clone远程Git服务器仓库的代码

bash 复制代码
[root@Jenkins ~]# mkdir test

[root@Jenkins ~]# cd test

[root@Jenkins test]# git clone git@192.168.200.111:/home/git/repos/app.git

正克隆到 'app'...

git@192.168.200.111's password: #输入远程服务器git用户的密码

warning: 您似乎克隆了一个空版本库。

进行代码提交测试

bash 复制代码
[root@Jenkins test]# cd app/

[root@Jenkins app]# echo "hello,devops" > test #创建一个文件

[root@Jenkins app]# cat test

hello,devops

[root@Jenkins app]# git add * #将文件添加到本地暂存区

[root@Jenkins app]# git commit -m '测试提交' #将代码提交到本地git仓库


*** Please tell me who you are.


Run


  git config --global user.email "you@example.com"

  git config --global user.name "Your Name"


to set your account's default identity.

Omit --global to set the identity only in this repository.


fatal: unable to auto-detect email address (got 'root@Jenkins.(none)')

配置git全局配置

bash 复制代码
[root@Jenkins app]# git config --global user.name "crushlinux"

[root@Jenkins app]# git config --global user.email "crushlinux@163.com"

[root@Jenkins app]# git config --list

user.name=crushlinux

user.email=crushlinux@163.com

core.repositoryformatversion=0

core.filemode=true

core.bare=false

core.logallrefupdates=true

remote.origin.url=git@192.168.200.111:/home/git/repos/app.git

remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*

branch.master.remote=origin

branch.master.merge=refs/heads/master


[root@Jenkins app]# git commit -m '测试提交'

[master(根提交) edf908b] 测试提交

 1 file changed, 1 insertion(+)

 create mode 100644 test


[root@Jenkins app]# git remote -v #已经被添加过远程地址(之前clone时自动添加)

origin git@192.168.200.111:/home/git/repos/app.git (fetch)

origin git@192.168.200.111:/home/git/repos/app.git (push)


[root@Jenkins app]# git push -u origin master #将代码推送到远程仓库的master分支

git@192.168.200.111's password:

Counting objects: 3, done.

Writing objects: 100% (3/3), 223 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To git@192.168.200.111:/home/git/repos/app.git

 * [new branch]      master -> master

分支 master 设置为跟踪来自 origin 的远程分支 master。

查看分支情况

bash 复制代码
[root@Jenkins app]# git branch -a

* master #本地当前所处分支

  remotes/origin/master #远程仓库已有分支

2.4 在Jenkins服务器进行SSH免密钥操作

bash 复制代码
[root@Jenkins ~]# ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:VL0GRJ2B9PYr4W75ixCX4c5cAMMAcCG8xiuzKmOgA9Q root@Jenkins

The key's randomart image is:

+---[RSA 2048]----+

|   .o.+o.*B+.o   |

|    .o   .+++    |

|  .. .  .  .=.   |

| . E+  .   oo=   |

|.  . .  S ..= o  |

|o o .      B o . |

|+  +      . *..  |

|=..        ooo   |

|++         .o.o. |

+----[SHA256]-----+

进行公钥分发

bash 复制代码
[root@Jenkins ~]# ssh-copy-id git@192.168.200.111

测试免密钥的git推送测试

bash 复制代码
[root@Jenkins ~]# cd test/app/

[root@Jenkins app]# echo "hello,CICD" >> test

[root@Jenkins app]# cat test

hello,devops

hello,CICD

[root@Jenkins app]# git add *

[root@Jenkins app]# git commit -m "免密钥推送测试"

[master fcbcec7] 免密钥推送测试

 1 file changed, 1 insertion(+)

[root@Jenkins app]# git push -u origin master

Counting objects: 5, done.

Writing objects: 100% (3/3), 279 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To git@192.168.200.111:/home/git/repos/app.git

   edf908b..fcbcec7  master -> master

分支 master 设置为跟踪来自 origin 的远程分支 master。

三、Jenkins高级管理

Jenkins官网: https://www.jenkins.io/

redhat版jenkins官方页面: https://pkg.jenkins.io/rpm-stable/

3.1、Jenkins的安装与基础配置

安装Jenkins方法

  1. 利用Yum源安装
  2. 下载jenkins的rpm包安装
  3. 基于jenkins的war包安装
  4. 基于docker容器安装

利用rpm包安装jenkins

bash 复制代码
[root@Jenkins ~]# rpm -ivh jenkins-2.222-1.1.noarch.rpm

[root@Jenkins ~]# chkconfig jenkins on

[root@Jenkins ~]# /etc/init.d/jenkins start

[root@Jenkins ~]# netstat -lnpt | grep :8080

tcp6       0      0 :::8080                 :::*                    LISTEN      2065/java

本地插件包安装方法

bash 复制代码
[root@Jenkins ~]#tar xf jenkins-2.222-plugins.tar.gz

[root@Jenkins ~]#rm -rf /var/lib/jenkins/plugins/*

[root@Jenkins ~]#mv plugins/ /var/lib/jenkins/

[root@Jenkins ~]#systemctl stop jenkins

[root@Jenkins ~]#chown -R jenkins:jenkins /var/lib/jenkins

[root@Jenkins ~]#systemctl start jenkins

[root@Jenkins ~]#tail -f /var/log/jenkins/jenkins.log

浏览器访问http://192.168.200.112:8080对jenkins进行初始化配置

bash 复制代码
[root@Jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword

c53c768b199f4ff087ce72c7938a79c7

更换插件安装源

bash 复制代码
[root@jenkins ~]# cd /var/lib/jenkins/updates

[root@jenkins updates]# sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json

[root@jenkins updates]# sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

[root@jenkins updates]# /etc/init.d/jenkins restart

Restarting jenkins (via systemctl):                        [  确定  ]

修改jenkins初始密码

使用新密码登录

系统管理--->全局工具配置

安装和配置jdk环境

bash 复制代码
[root@Jenkins ~]# tar xf jdk-8u191-linux-x64.tar.gz

[root@Jenkins ~]# mv jdk1.8.0_191/ /usr/local/java

[root@Jenkins ~]# vim /etc/profile

export JAVA_HOME=/usr/local/java

export PATH=$PATH:$JAVA_HOME/bin

export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

[root@Jenkins ~]# rm -rf /usr/bin/java

[root@Jenkins ~]# source /etc/profile

[root@Jenkins ~]# java -version

java version "1.8.0_191"

Java(TM) SE Runtime Environment (build 1.8.0_191-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

安装和配置maven环境

bash 复制代码
[root@Jenkins ~]# tar xf apache-maven-3.5.0-bin.tar.gz

[root@Jenkins ~]# mv apache-maven-3.5.0 /usr/local/maven

[root@Jenkins ~]# vim /etc/profile

MAVEN_HOME=/usr/local/maven

export PATH=${MAVEN_HOME}/bin:$PATH

[root@Jenkins ~]# source /etc/profile

[root@Jenkins ~]# mvn -v

Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)

Maven home: /usr/local/maven

Java version: 1.8.0_191, vendor: Oracle Corporation

Java home: /usr/local/java/jre

Default locale: zh_CN, platform encoding: UTF-8

OS name: "linux", version: "3.10.0-1127.el7.x86_64", arch: "amd64", family: "unix"

Maven配置:

配置maven的settings.xml配置文件的位置路径(不修改为默认路径)。

配置JDK:

配置java命令的执行路径;JDK是java语言的软件开发工具包。

配置Git:

配置Git的命令执行路径;Git是分布式版本控制软件。

配置Gradle:

配置Gradle的执行路径;Gradle是面向java的自动化构建开源工具,同maven。

配置Ant:

配置Ant的执行路径;Ant是面向java的自动化构建开源工具,同maven。

配置Maven:

配置maven的命令执行路径;maven是面向java的自动化构建开源工具。

配置Docker:

配置Docker的命令执行路径;Docker是最近大热的容器级虚拟化产品。

全局工具配置----> 配置Git和JDK

bash 复制代码
[root@Jenkins ~]# which git

/usr/bin/git

全局工具配置----> 配置maven

  1. Apache Maven是一种创新的软件项目管理工具,提供了一个项目对象模型(POM)文件的新概念来管理项目的
  2. 构建,相关性和文档。最强大的功能就是能够自动下载项目依赖的库文件。
  3. 在开发中,为了保证编译通过,开发会到处去寻找项目依赖的jar包(类似rpm安装软件时需要的一堆依赖包)
  4. 因此,就要用到Maven(Ant和gradle也是干这个的)
  5. Maven其实就类似Linux的Yum仓库,可以自动帮我们下载(公网源)和安装java项目所依赖的支持包。

3.2、用户权限管理

在一个成熟的企业生产环境中,jenkins是需要通过权限来控制角色功能使用的

  1. 开发人员利用jenkins====>生产环境项目代码版本发布(A/B测试等)
  2. 测试人员利用jenkins====>测试环境自动化部署
  3. 运维人员利用jenkins====>生产环境项目代码版本回滚

安装插件Role-based Authorization Strategy

全局安全配置--->授权策略--->Role-Based Strategy

注册两个用户(开发和测试)

由于开启了Role-Based Strategy,此时用户没有任何权限

系统管理--->Manage and Assign Roles

  1. Manage Roles:权限管理
  2. Assign Roles:授权管理

进入权限管理

Golbal roles:全局权限管理

jenkins的整体权限分配,至少要开读的权限

Project roles:项目权限管理

正则匹配具体的项目,分配管理权限

(2)进入授权管理

  1. Global roles:全局权限授权
  2. Item roles:项目权限授权

(3)创建两个项目分别以A-和B-开头

(4)登陆用户user1和user2进行权限登陆测试

3.3、参数化构建

参数化构建就是在执行自动构建之前可以对构建过程手动传入外部参数,从而改变构建的过程。

(1)配置一个构建脚本,然后执行

(2)添加参数化构建功能

安装插件Extended Choice Parameter

Extended Choice Parameter插件作用就是在参数化构建时可以出现一个下拉框让用户直接选择多个值。

我们还可以在一个文件里创建参数,然后让插件引用这个参数

创建一个参数定义文件

bash 复制代码
[root@Jenkins ~]# vim /opt/jenkins.property

cloud=test01,test02,test04

3.4、Git参数化构建插件

Git Parameter插件可以直接获取Git仓库的branch,tag等信息

安装插件Git Parameter

添加远程Git仓库的密钥管理

由于我们之前用jenkins的root账户已经做过免密钥连接git了

因此,我们创建SSH的密钥管理

进行Git参数化构建

(1)配置Git Parameter插件

(2)配置Git远程仓库

(4)给Git远程仓库增加分支

bash 复制代码
[root@Jenkins ~]# cd test/app/

[root@Jenkins app]# git branch

* master

[root@Jenkins app]# git branch dev

[root@Jenkins app]# git checkout dev

切换到分支 'dev'

[root@Jenkins app]# ls

test

[root@Jenkins app]# git add *

[root@Jenkins app]# git commit -m "开发分支提交"

# 位于分支 dev

无文件要提交,干净的工作区

[root@Jenkins app]# git push -u origin dev

Total 0 (delta 0), reused 0 (delta 0)

To git@192.168.200.111:/home/git/repos/app.git

 * [new branch]      dev -> dev

分支 dev 设置为跟踪来自 origin 的远程分支 dev。

(5)进行jenkins项目代码拉取测试

3.5、分布式构建

|-----------------|-----------------|----------------------|
| 主机名 | IP地址 | 备注信息 |
| Git | 192.168.200.111 | Git服务器和Jenkins的Slave |
| Jenkins | 192.168.200.112 | Jenkins服务器 |

jenkins的分布式构建操作,可以通过slave代理节点来执行项目任务;

添加一个用于连接slave代理节点的SSH证书

系统管理--->节点管理

特别提示:

如果没有设置工具位置--->jdk,那么jenkins会默认去/var/lib/jenkins/jdk下找java命令,如果找不到代理就会连接不上。

slave节点安装java环境

bash 复制代码
[root@Git ~]# tar xf jdk-8u191-linux-x64.tar.gz

[root@Git ~]# mv jdk1.8.0_191/ /usr/local/java

[root@Git ~]# vim /etc/profile

export JAVA_HOME=/usr/local/java

export PATH=$PATH:$JAVA_HOME/bin

export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

[root@Git ~]# rm -rf /usr/bin/java

[root@Git ~]# source /etc/profile

[root@Git ~]# java -version

java version "1.8.0_191"

Java(TM) SE Runtime Environment (build 1.8.0_191-b12)

Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

查看slave节点启动日志

强制让项目A-Web运行在slave1节点上,并运行项目

查看A-web的构建日志

查看slave服务器构建环境

bash 复制代码
[root@Git ~]# cd /var/lib/jenkins/workspace/

[root@Git workspace]# ls

A-web  A-web@tmp

[root@Git workspace]# cat A-web/

.git/ test  

[root@Git workspace]# cat A-web/test

hello,devops

hello,CICD
相关推荐
主机哥哥7 小时前
还不会部署OpenClaw?阿里云推出五种OpenClaw快速部署方案
阿里云·云计算
2601_949146537 小时前
Shell语音通知接口使用指南:运维自动化中的语音告警集成方案
运维·自动化
儒雅的晴天7 小时前
大模型幻觉问题
运维·服务器
Gofarlic_OMS8 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
通信大师8 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
dixiuapp9 小时前
智能工单系统如何选,实现自动化与预测性维护
运维·自动化
Elastic 中国社区官方博客9 小时前
如何防御你的 RAG 系统免受上下文投毒攻击
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
小锋学长生活大爆炸9 小时前
【教程】免Root在Termux上安装Docker
运维·docker·容器
进击切图仔9 小时前
常用 Docker 命令备份
运维·docker·容器
NotStrandedYet10 小时前
《国产系统运维笔记》第8期:挑战国产化流媒体部署——银河麒麟+龙芯架构编译SRS实战全记录
运维·kylin·国产化·银河麒麟·龙芯·信创运维·srs编译安装