云计算运维 · 第三阶段 · 代码上线案例

学习b记 · 第三阶段

持续集成案例

这一章做一个小的案例,git、gitlab、jenkins、sonarqube、maven、shell把这周学的一整个流程串联起来做一个完整的代码发布流程案例,这一部分东西比较多,相对于之前的笔记这个会做的仔细一点。#嘿嘿回家就是舒服
主机名服务IP
shellgit、gitlab10.0.0.200
jenkinsjenkins、maven10.0.0.201
nexusnexus10.0.0.202
sonarqubesonarqube10.0.0.203
web02nginx10.0.0.8

一、Git

     Git*(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
1、安装
#防火墙啥的就不写了该关关
1)yum install git -y #一般系统都有#安装后配置一下用户和邮箱,不配置不让推项目[root@shell /]# git config --global user.name "qxl" [root@shell /]# git config --global user.email "qxl@mail.com"# 语法高亮[root@shell /]# git config –-global color.ui true#配置完了看一下[root@shell /]#  git config --listuser.name=qxluser.email=qxl@mail.comcolor.ui=true#这样git就算配置完毕
2)初始化#这一步就是准备个目录用作于使用git[root@shell git_workspace]#  git initInitialized empty Git repository in /root/git_workspace/.git/#在家目录下创建一个目录git_workspace,初始化完会生成.git隐藏目录[root@shell git_workspace]# ll -atotal 0drwxr-xr-x  3 root root  18 Feb  7 00:29 .dr-xr-x---. 3 root root 206 Feb  7 00:29 ..drwxr-xr-x  7 root root 119 Feb  7 00:29 .git
3)隐藏文件介绍:cd .gitbranches # 分支目录config   # 定义项目特有的配置选项description  # 仅供git web程序使用HEAD # 指示当前的分支hooks # 包含git钩子文件info # 包含一个全局排除文件(exclude文件)objects # 存放所有数据内容,有info和pack两个子文件夹refs # 存放指向数据(分支)的提交对象的指针index # 保存暂存区信息,在执行git init的时候,这个文件还没有
2、使用
    1)创建数据——提交数据创建的git_workspace是本地工作目录,通过git add提交到暂存区域,在git commit从暂存区提交到本地仓库,最后git push到远程仓库,可以通过远程仓库进行拉取或者克隆#图画的比较草率,这样就差不多了,基础命令前面文章有写

在这里插入图片描述

二、Gitlab

1、安装
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
#我用的包是这个版本 gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm 去上面的镜像里面找就行
#依赖,需提前安装
yum install -y curl policycoreutils-python openssh-server
#安装gitlab
rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
#修改一下配置文件
vim /etc/gitlab/gitlab.rb                   #  gitlab 配置文件
external_url 'http://10.0.0.200'
gitlab-ctl reconfigure          # 更改配置文件后需重新配置/opt/gitlab/                    # gitlab的程序安装目录
/var/opt/gitlab                 # gitlab目录数据目录
/var/opt/gitlab/git-dfata       # 存放仓库数据
gitlab-ctl status               # 查看目前gitlab所有服务运维状态
gitlab-ctl stop                 # 停止gitlab服务
gitlab-ctl stop nginx           # 单独停止某个服务
gitlab-ctl tail                 # 查看所有服务的日志#直接启动
gitlab-ctl start
2、使用
浏览器直接输入10.0.0.200访问,先创建一下密码然后登陆 注意:如果打开页面后502那是你机器给的配置不够,加点内存啥的 #这是登录后的首页

在这里插入图片描述

3、创建组用户 项目
    1)点击上方锤子进入管理区域,点击New group创建组

在这里插入图片描述

    就这样创建即可,下面都是默认选项未改变,名字啥的可以自定义

在这里插入图片描述

    创建用户就填写上面的,没截到图下面还是默认

在这里插入图片描述

    创建完用户需要创建密码,把用户放到组内

在这里插入图片描述

在这里插入图片描述

    接下来就得创建仓库存放项目了,名字可以自定义,描述无所谓

在这里插入图片描述

        创建完后是这样的,上面橙色的部分提示是因为没有做ssh免秘钥,想要来这个页面拉取项目需要服务器的公钥,需要将这个机器的公钥添加到gitlab中,直接点击 add an SSH key

在这里插入图片描述

    #回到服务器生成秘钥对,复制这一堆[root@shell ~]# ssh-keygen[root@shell ~]# cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLlHNM5ypJriOW3FxS63bC+jv3q3W3iISe/sQHtsiehcRMdTjR4UXRNx66HSwa03MciPLxLMVyEgCn26WdXLoHMDi4siZ7NxB7rYYAY3mO7Qf6lIXVIROXiKIe+NSZ+ebUBKKoE1EhoZzDw0l20EYTwzFR+kHtfgzbVFZwlDWIzUlw/Hl1Mh4cymnmevKVIHCsJIk9vF0wNoxFyG8+zwhjeLV1vh2uuqrdzImuaaokXd7B8NNXT3MAvdre97zjuoIADLvWpVIRuuumQtrjzsOW5xhAdgmPXEK0LWo/7pZMX25tQtpfTDZKZmSiixF1ISQw3jPI6BRoWQUaRykMzAMp root@shell复制公钥点击下方按钮添加,这样仓库就设置好了 接下来尝试推送一些文件到gitlab中

在这里插入图片描述

4、测试推送
1)添加远程仓库 #第一次拉取会出现指纹验证直接yes就完了[root@shell git_workspace]# git remote add origin git@10.0.0.200:qxl/game.git
2)上传文件[root@shell git_workspace]# touch test.txt[root@shell git_workspace]# git add .[root@shell git_workspace]# git commit -m "test.txt"
3)给爷往上推[root@shell git_workspace]# git push -u origin master#刷新一下浏览器就出来了 现在git推送就没有问题了

在这里插入图片描述

5、保护分支
#这次的案例就把主要的功能都做通,这些拓展就不做了,还是写一下是干啥的
1)设置保护主分支这个功能呢就是保护master主分支除了管理不能让任何人推送,保护线上的代码不出错

在这里插入图片描述

在这里插入图片描述

6、gitlab备份
#这个直接复制过来了,没讲,用得不多对gitlab进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的gitlab相同的版本。将gitlab迁移到另一台服务器上的最佳方法就是通过备份和还原。gitlab提供了一个简单的命令行来备份整个gitlab,并且能灵活的满足需求。备份文件将保存在配置文件中定义的backup_path中,文件名为TIMESTAMP_gitlab_backup.tar,TIMESTAMP为备份时的时间戳。TIMESTAMP的格式为:EPOCH_YYYY_MM_DD_Gitlab-version。如果自定义备份目录需要赋予git权限配置文件中加入
vim	/etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = '/data/backup/gitlab'
gitlab_rails['backup_keep_time'] = 604800       #备份保留的时间(以秒为单位,这个是七天默认值),
mkdir /data/backup/gitlab
chown -R git.git /data/backup/gitlab
gitlab-ctl reconfigure

三、Jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
1、安装
链接:https://pan.baidu.com/s/1m4vJbK9DkIjVTppGPT2qWQ?pwd=kxxw 
提取码:kxxw
#这里面放了几个这次案例用的包安装jenkins需要jdk,这次采用本地安装[root@jenkins ~]# ls
anaconda-ks.cfg  jdk-8u181-linux-x64.rpm  jenkins-2.176.1-1.1.noarch.rpm
[root@jenkins ~]# rpm -ivh jdk-8u181-linux-x64.rpm 
warning: jdk-8u181-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...1:jdk1.8-2000:1.8.0_181-fcs        ################################# [100%]
Unpacking JAR files...tools.jar...plugin.jar...javaws.jar...deploy.jar...rt.jar...jsse.jar...charsets.jar...localedata.jar...
[root@jenkins ~]# rpm -ivh jenkins-2.176.1-1.1.noarch.rpm 
warning: jenkins-2.176.1-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...1:jenkins-2.176.1-1.1              ################################# [100%]安装完需要修改一下启动用户vim /etc/sysconfig/jenkins
JENKINS_USER="root"修改完直接启动就可以了
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# systemctl enable jenkins安装插件链接:https://pan.baidu.com/s/1YEgerbWh5-gurQHAcZWdNA?pwd=kxxw 
提取码:kxxwcd /var/lib/jenkins/ #插件所在目录,把plugins这个目录备份一下,直接解压我分享的包就行了
systemctl restart jenkins #记得重启jenkins主要的目录
/usr/lib/jenkins/:jenkins安装目录,WAR包会放在这里
/etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置
/var/lib/jenkins/:默认的JENKINS_HOME
/var/log/jenkins/jenkins.log:Jenkins日志文件
2、使用
浏览器直接访问ip:8080就会打开下面这个页面,默认密码去它指定位置复制,选择安装插件直接右上角x掉,前面插件已经装上了不需要在安装了

在这里插入图片描述

在这里插入图片描述

默认进来就是这样的了,原来是英文的,访问之前已经安装上插件就会变成中文。接下来是使用jenkins进行操作了,此次案例是用到了三个类型的项目,下面开始操作

四、自由风格项目

点击首页的创建一个新任务后,跳转到这个页面输入名称选择第一个,确定

在这里插入图片描述

修改的部分都会截图,没截图的选项不用动

在这里插入图片描述

这里是将gitlab创建的仓库连接粘贴过来,默认是拉取master分支的项目,错误是因为jenkins无法从gitlab上拉取代码,需要公钥。

在这里插入图片描述

在这里插入图片描述

去jenkins的机器生成一下密钥对,然后把公钥复制到gitlab#怎么生成上面有
复制完之后可以先保存一下项目,去机器上克隆一下项目,添加一下指纹验证
[root@jenkins ~]# git clone git@10.0.0.200:qxl/game.git

在这里插入图片描述

克隆完之后继续配置jenkins项目,这时候你会发现不红了,这样就配置好了,接下来放一个小游戏的代码上去测试一下

在这里插入图片描述

在这里插入图片描述

链接:https://pan.baidu.com/s/1vkBAvBqcEovQuw9k20VMIg?pwd=kxxw 
提取码:kxxw准备了一个经典小游戏,直接解压到git初始化的目录里面,没用的删了就行
[root@shell git_workspace]# ll
total 48
-rw-r--r-- 1 root root 28032 May 24  2021 bgm.mp3
drwxr-xr-x 2 root root    23 May 24  2021 css
drwxr-xr-x 2 root root    23 May 24  2021 images
-rw-r--r-- 1 root root  8956 May 24  2021 index.html
drwxr-xr-x 2 root root   213 May 24  2021 js
drwxr-xr-x 2 root root  4096 May 24  2021 roms
-rw-r--r-- 1 root root   811 May 24  2021 shuoming.html给他手动提交一下
[root@shell git_workspace]# rm -rf test.txt
[root@shell git_workspace]# git add *
[root@shell git_workspace]# git commit -m "xbw"
[root@shell git_workspace]# git push -u origin master
提交到远程仓库以后就是下面这样的

在这里插入图片描述

仓库那边代码上传之后就可以用jenkins进行拉取测试了,点击立即构建等待下方进度条,拉取结束后回到机器,/var/lib/jenkins/workspace 这个目录下有一个刚拉下来的项目就ok了
[root@jenkins workspace]# ll
total 0
drwxr-xr-x 7 root root 135 Feb  7 06:08 free_game

在这里插入图片描述

·现在代码可以拉取了,下一步可以给他放到网站里测试,代码拉到jenkins里使用脚本发到web服务器上·这里准备一台web
·在jenkins服务器上准备一下脚本 给一下执行权限
[root@jenkins scripts]# pwd
/server/scripts
[root@jenkins scripts]# chmod +x xbw.sh 
[root@jenkins scripts]# ls
xbw.sh
[root@jenkins scripts]# cat xbw.sh 
#!/bin/bash
IP=10.0.0.8
tar zcf /opt/game_$BUILD_ID.tar.gz ./*
scp /opt/game_$BUILD_ID.tar.gz $IP:/code/
ssh $IP "mkdir /code/game_$BUILD_ID;"
ssh $IP "cd /code && tar xf game_$BUILD_ID.tar.gz -C game_$BUILD_ID && rm -rf game_$BUILD_ID.tar.gz;" 
ssh $IP "cd /code && rm -rf xbw_game ; ln -s game_$BUILD_ID xbw_game"·jenkins和web需要做一下免秘钥
·去jenkins项目点击配置拉到下面,选择点击 执行 shell
·把命令粘贴到文本框内   sh /server/scripts/xbw.sh最后点击构建后代码会直接发送到web指定的目录内
[root@web02 code]# ls
game_5  xbw_game
并且页面也可以直接访问

在这里插入图片描述

在这里插入图片描述

1、添加钩子
#有个地方忘了写,登录进来先改密码,不然每次都得复制很麻烦,先改这个

在这里插入图片描述

拉到下面更改,保存后重新登录

在这里插入图片描述

现在的流程是写完代码手动提交在点击立即构建在部署到web服务器,下一步是添加触发器,在你提交代码到远程仓库,触发钩子自动构建部署到web服务器上。 点击配置 

在这里插入图片描述

点击勾选选项,滑到下面点击Generate生成一个token复制一下

在这里插入图片描述

在这里插入图片描述

复制好之后返回gitlab,点击进入项目左侧导航列设置,点击Integrations将jenkins复制的token粘贴到对应位置,URL是jenkins勾选那个选项最后面的那个http连接,最后将gitlab和jenkins的设置都保存就可以测试了

在这里插入图片描述

操作的详细意义就不写什么意思了,网上有的是,多练练就懂了,测试钩子配置是否成功
#先修改一下index.html,打开往下翻有游戏名称可以加一点标记然后执行下面的操作。
[root@shell git_workspace]# git commit -am "v1.0"
[master bc635fd] v1.02 files changed, 2 insertions(+), 2 deletions(-)delete mode 100644 test.txt
[root@shell git_workspace]# git push -u origin master
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 282 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
To git@10.0.0.200:qxl/game.git4451a4b..bc635fd  master -> master
Branch master set up to track remote branch master from origin.
#将项目推到远程仓库之后,会直接发到web服务器上,我在魂斗罗后面加了个标签显示,可以看到已经ok了

请添加图片描述

五、Sonarqube

	SonarQube是一种自动代码审查工具,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。它可以与您现有的工作流程集成,以实现跨项目分支和提取请求的连续代码检查Sonar Qube可以与多种软件整合进行代码扫描,比如Maven,Gradle,Git,Jenkins等,并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来
1、安装
1. SonarQube基础java开发,需安装open JDK8版本
2. SonarQube需要依赖MySQL数据库,至少5.6版本以上
3. SonarQube的小型实例至少4G内存,如果大型实例需要16G内存Java我上面分享的网盘里面有
安装数据库
下载mysqlyum源
https://dev.mysql.com/downloads/repo/yum/
这个版本看着下我是centos7
下完了上传到服务器上,也可以复制连接直接wget

请添加图片描述

请添加图片描述

#下载完直接安装
[root@sonarqube ~]# rpm -ivh mysql80-community-release-el7-11.noarch.rpm 
warning: mysql80-community-release-el7-11.noarch.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...1:mysql80-community-release-el7-11 ################################# [100%]#安装完之后会下载三个repo源
[root@sonarqube ~]# ls /etc/yum.repos.d/
CentOS-Base.repo  epel.repo  files  mysql-community-debuginfo.repo  mysql-community.repo  mysql-community-source.repo#修改一下源  mysql-community.repo 把8.0节点关掉打开5.7的
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch
enabled=1#这里
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch
enabled=0#这里
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql#直接安装,安装过程比较慢需要多等一会
[root@sonarqube yum.repos.d]# yum install mysql-community-server -y
[root@sonarqube yum.repos.d]# systemctl start mysqld
启动后默认密码在日志里,末尾12位就是密码
[root@sonarqube yum.repos.d]# cat /var/log/mysqld.log | grep "pass"
密码中有特殊符号加上单引号
[root@sonarqube yum.repos.d]# mysql -uroot -p'Q0kethtukp(<'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> #修改登录数据库密码,创建sonar数据库
mysql> set global validate_password_policy=0; #策略设为0,表示只检查密码长度
mysql> set global validate_password_length=6; #默认密码长度为6
mysql> alter user root@"localhost" identified by '123456'; 
[root@sonarqube sonarqube]# mysql -uroot -p123456 -e "CREATE DATABASE sonar DEFAULT CHARACTER SET utf8;"
mysql: [Warning] Using a password on the command line interface can be insecure.#安装java,这个包上面网盘分享有
[root@sonarqube ~]# ls
anaconda-ks.cfg  jdk-8u181-linux-x64.rpm
[root@sonarqube ~]# rpm -ivh  jdk-8u181-linux-x64.rpm #安装sonarqube,插件客户端啥的都有
链接:https://pan.baidu.com/s/1fnUVXbfYCF3CYkoIJXM6WA?pwd=kxxw 
提取码:kxxw[root@sonarqube ~]# unzip sonarqube-7.0.zip 
[root@sonarqube ~]# ls
anaconda-ks.cfg  jdk-8u181-linux-x64.rpm  sonarqube-7.0  sonarqube-7.0.zip
[root@sonarqube ~]# mv sonarqube-7.0 /usr/local/
#做个软连接,更改一下启动用户
[root@sonarqube ~]# cd /usr/local/
[root@sonarqube local]# ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  sonarqube-7.0  src
[root@sonarqube local]# ln -s sonarqube-7.0/ sonarqube
[root@sonarqube local]# useradd sonar
[root@sonarqube local]# chown -R sonar.sonar /usr/local/sonarqube-7.0/#更改sonar的数据库设置,内容里面有把注释去掉就行了加上用户名密码
[root@sonarqube local]# vim /usr/local/sonarqube/conf/sonar.properties
sonar.jdbc.username=root
sonar.jdbc.password=123456
useUnicode=true&characterEncoding=utf8&rewrieBatchedStatements=true&useConfigs=maxPerformance&useSSL=false#使用普通用户启动
[root@sonarqube local]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start"
Starting SonarQube...
Started SonarQube.#浏览器访问地址是10.0.0.203:9000
第一次进忘了截图让我关了我g,这个是首页,点击登录 账号密码都是admin,登录后就是获取token,输入个名字点击后面的按钮

请添加图片描述

请添加图片描述
请添加图片描述

右边黑色的那部分命令可以点击copy复制到jenkins找个位置保存下来,因为最下面那个值是唯一的,关闭这个窗口这个代码就再也出不来了,除非你重新创建一个项目,这里完事之后点击右上角跳过就完了,sonar配置完后需要把客户端安装到jenkins上,客户端的包上面连接有[root@jenkins ~]# cat sonar.txt 
sonar-scanner \-Dsonar.projectKey=html \-Dsonar.sources=. \-Dsonar.host.url=http://10.0.0.203:9000 \-Dsonar.login=d01aae94699940b8f47a15e7a6ce9a10e9f4aa08

请添加图片描述

请添加图片描述

2、配置
#上传上来之后解压放到指定目录下面做个软连接,环境变量想用就弄
[root@jenkins ~]# ls
anaconda-ks.cfg  game  sonar-scanner-4.2.0.1873-linux  sonar-scanner-cli-4.2.0.1873-linux.zip  sonar.txt
[root@jenkins ~]# mv sonar-scanner-4.2.0.1873-linux/ /usr/local/
[root@jenkins ~]# cd /usr/local/
[root@jenkins local]# ln -s sonar-scanner-4.2.0.1873-linux/ sonar#下一步在服务端安装sonar的插件 插件的包上面连接也有 做之前先弄个备份 别搞错服务器
[root@sonarqube extensions]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart"
#按着做是不会出错的 就不测试了下一步将sonarqube集成到jenkins里
回到jenkins点击 配置 拉到下面点击增加构建步骤选择图片选项

在这里插入图片描述

点击配置sonar 这里就是把sonar生成的那块黑色背景的命令放过来

在这里插入图片描述

在这里插入图片描述

name自定义,URL就是sonar的访问地址,下面的token现在还没有,需要先保存获取一下,填写完直接保存。重新选择进入全局配置,再点击添加这次就会有jenkins选项

在这里插入图片描述

在这里插入图片描述

类型选择Secert text 下面的Secret填sonar生成的
sonar-scanner \-Dsonar.projectKey=html \-Dsonar.sources=. \-Dsonar.host.url=http://10.0.0.203:9000 \-Dsonar.login=d01aae94699940b8f47a15e7a6ce9a10e9f4aa08   #就复制=后面的值下面的ID自定义

在这里插入图片描述

  设置配置完后还需要配置全局工具。先返回到jenkins的配置页,点击图片选项

在这里插入图片描述

滑倒下面点击新增

在这里插入图片描述

路径是jenkins上配置的客户端的路径,配置完后回到jenkins配置错误提示就都消失了。按照图片上把命令填上 点击保存。回到页面会看到屏幕上出现了Sonarqube图标显示,点击构建测试一下。成功就算完事

在这里插入图片描述

在这里插入图片描述

六、jenkins微信通知

jenkins集成微信,工作中档git有新代码提交会触发钩子自动完成上线,运维和开发人员不须时刻盯着jenkins,通过微信的方式显示给运维和开发人员
链接:https://pan.baidu.com/s/13pvW_asobBq42yxTVQYjFA?pwd=kxxw 
提取码:kxxw这个微信通知需要注册企业微信,就简单写一下步骤不写这部分的东西了(太多了懒得写),注册创建应用,复制Agentid和Secret的值。后面需要放到脚本里。企业可信ip注意一下,换WiFi啥的公网ip都会变
#第一个改的是你自己的企业微信名,下一个应用的agentid,第三个是企业id,最后一个是应用里面获取的
/server/scripts/jenkins_notify.py #我的脚本放这了

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

jenkins是没有直接使用微信通知的插件的,前面安装插件的地方已经放进去了。安装运行脚本的环境
#安之前下载阿里云的epel源,网络环境要稍微好一点,安装报错就多试几次,一般就是网不好
yum -y install python-pip
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
python get-pip.py
pip2.7 install requests
最后去配置一下项目,添加一个构建后操作,添加一下写的脚本和通知信息,保存后就可以执行构建了,构建成功后会将信息发送到你手机企业app上

请添加图片描述

下面是jenkins的其他项目配置流程,当然像前面的这些很多功能都可以在其他类型的项目上使用。

七、Pipeline项目

1.什么是pipeline
Jenkins 2.0的精髓是Pipeline as Code,是帮助Jenkins实现CI到CD转变的重要角色。什么是Pipeline,简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。
2.Pipeline 概念
Pipeline 是一个用户定义的 CD 流水线模式。Pipeline 代码定义了通常包含构建、测试和发布步骤的完整的构建过程。
Nodenode 是一个机器,它是 Jenkins 环境的一部分,并且能够执行 Pipeline。同时,node 代码块也是脚本式 Pipeline 语法的关键特性。
StageStage 块定义了在整个 Pipeline 中执行的概念上不同的任务子集(例如“构建”,“测试”和“部署”阶段),许多插件使用它来可视化或呈现 Jenkins 管道状态/进度。
Step一项任务。从根本上讲,一个步骤告诉 Jenkins 在特定时间点(或过程中的“步骤”)要做什么。例如,使用 sh step:sh 'make' 可以执行 make 这个 shell 命令。
1、配置
创建一个pipline项目,gitlab还是用那个小游戏

请添加图片描述

请添加图片描述

这个项目是通过脚本来运行,输出的结果可以按照步骤显示,脚本分为两种编写方法:脚本式、声名式。这里使用声名式。下面的配置是将脚本直接放到项目里面 保存。

请添加图片描述

链接:https://pan.baidu.com/s/15CvTiMswsy81r_qxGtFoNQ?pwd=kxxw 
提取码:kxxw
放到git本备,脚本提交到远程仓库
[root@shell git_workspace]# ls
bgm.mp3  css  images  index.html  Jenkinsfile  js  roms  shuoming.html
[root@shell git_workspace]# git add .
[root@shell git_workspace]# git commit -m "Jenkinsfile"
[master 3997c2a] Jenkinsfile1 file changed, 28 insertions(+)create mode 100644 Jenkinsfile
[root@shell git_workspace]# git push -u origin master 
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 590 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@10.0.0.200:qxl/game.gitbc635fd..3997c2a  master -> master
Branch master set up to track remote branch master from origin.配置一下sonarqube客户端,需要将地址指向到远程,按着下面改,没有的就加上
[root@jenkins conf]# pwd
/usr/local/sonar/conf
[root@jenkins conf]# ls
sonar-scanner.properties
[root@jenkins conf]# cat sonar-scanner.properties 
#----- Default SonarQube server
sonar.host.url=http://10.0.0.203:9000
sonar.login=d01aae94699940b8f47a15e7a6ce9a10e9f4aa08 #这是上面sonarqube生成项目产生的
#----- Default source code encoding
sonar.sourceEncoding=UTF-8直接立即构建,全绿就完了

八、Maven

Maven是一个强大的项目管理工具,广泛应用于Java开发中。在Linux系统上部署Maven项目需要一些特定的步骤和配置
链接:https://pan.baidu.com/s/1bNgBFD0jHyoOaELdvwDKDg?pwd=kxxw 
提取码:kxxw
#安装Maven
下载上传到服务器后解压到指定位置[root@jenkins ~]# ls
anaconda-ks.cfg  apache-maven-3.3.9-bin.tar.gz  game  get-pip.py  jenkins_notify.py  sonar.txt
[root@jenkins ~]# tar xf apache-maven-3.3.9-bin.tar.gz -C  /usr/local/[root@jenkins local]# ll
total 0
drwxr-xr-x  6 root root 99 Feb 10 06:59 apache-maven-3.3.9
drwxr-xr-x. 2 root root  6 Apr 11  2018 bin
drwxr-xr-x. 2 root root  6 Apr 11  2018 etc
drwxr-xr-x. 2 root root  6 Apr 11  2018 games
drwxr-xr-x. 2 root root  6 Apr 11  2018 include
drwxr-xr-x. 2 root root  6 Apr 11  2018 lib
drwxr-xr-x. 2 root root  6 Apr 11  2018 lib64
drwxr-xr-x. 2 root root  6 Apr 11  2018 libexec
lrwxrwxrwx  1 root root 19 Feb 10 07:00 maven -> apache-maven-3.3.9/
drwxr-xr-x. 2 root root  6 Apr 11  2018 sbin
drwxr-xr-x. 5 root root 49 Dec  1 03:52 share
lrwxrwxrwx  1 root root 31 Feb  9 03:37 sonar -> sonar-scanner-4.2.0.1873-linux/
drwxr-xr-x  6 root root 51 Oct  1  2019 sonar-scanner-4.2.0.1873-linux
drwxr-xr-x. 2 root root  6 Apr 11  2018 src#PATH变量就不弄了
命令释义
validate(验证):  验证项目正确,并且所有必要信息可用。
compile(编译): 编译项目源码
test(测试): 使用合适的单元测试框架测试编译后的源码。
package(打包): 源码编译之后,使用合适的格式(例如JAR格式)对编译后的源码进行打包。
integration-test(集成测试): 如果有需要,把包处理并部署到可以运行集成测试的环境中去。
verify(验证): 进行各种测试来验证包是否有效并且符合质量标准。
install(安装): 把包安装到本地仓库,使该包可以作为其他本地项目的依赖。
deploy(部署): 在集成或发布环境中完成,将最终软件包复制到远程存储库,以与其他开发人员和项目共享。
mvn clean (清除) : 清除上次编译的结果
mvn package -Dmaven.test.skip=true 跳过测试用例
cd hello-world
mvn package      #会去maven的中央仓库去下载需要的依赖包和插件到.m2目录下#配置阿里源
[root@jenkins maven]# pwd
/usr/local/maven
[root@jenkins maven]# ls
bin  boot  conf  lib  LICENSE  NOTICE  README.txt
[root@jenkins maven]# vim conf/settings.xml #放到配置文件的mirrors标签里面,这样就配置完毕
<mirror> 
<id>nexus-aliyun</id> 
<mirrorOf>*</mirrorOf> 
<name>Nexus aliyun</name> 
<url>http://maven.aliyun.com/nexus/content/groups/public</url> 
</mirror>
#测试使用后面一起

九、Nexus

Nexus是一款开源的Maven仓库管理工具,可以搭建私有Maven仓库。
链接:https://pan.baidu.com/s/1kTwG47fBa5BEDX_KqwiDxg?pwd=kxxw 
提取码:kxxw
#这个是nexus包,还需要java上面的连接有#上传安装就不说了,都一样的
解压到/usr/local/,在做一个软连接#启动
[root@nexus bin]# pwd
/usr/local/nexus/bin
[root@nexus bin]# ls
contrib  nexus  nexus.rc  nexus.vmoptions
/usr/local/nexus/bin/nexus start#访问
10.0.0.202:8081
用户名:admin 密码:admin123
登录后配置阿里云仓库
将图片中的第三步改成 http://maven.aliyun.com/nexus/content/groups/public 修改后点击下方save保存

请添加图片描述

 Nexus 安装成功后,接下来需要修改 Maven 的配置文件(settings.xml),整合 Nexus。找到 <servers> 标签,添加 Nexus 默认认证信息:<server>   <id>my-nexus-releases</id>   <username>admin</username>   <password>admin123</password>   </server>   <server>   <id>my-nexus-snapshot</id>   <username>admin</username>   <password>admin123</password>   </server>找到 <mirrors> 标签,添加镜像:<mirror><!--This sends everything else to /public --><id>nexus</id><mirrorOf>*</mirrorOf><url>http://localhost:8081/nexus/content/groups/public/</url>
</mirror>找到 <profiles> 标签,添加仓库信息:<profile><id>nexus</id><!--Enable snapshots for the built in central repo to direct --><!--all requests to nexus via the mirror --><repositories><repository><id>central</id><url>http://central</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>central</id><url>http://central</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories>
</profile>激活仓库:<activeProfiles><!--make the profile active all the time --><activeProfile>nexus</activeProfile>
</activeProfiles>配置完成后保存,并重启 nexus  服务。重启  nexus  服务 完成后,在命令行窗口进入一个使用 Maven 构建的项目,输入 mvn package clean 命令,清理完成后,登录 nexus 的 admin 账号可以看到 Public Repositories  下出现了一些 Jar 包。
#这个文件已经准备好了,不用自己改
链接:https://pan.baidu.com/s/1NKXtA5nJ74IKNBm1i_v_bw?pwd=kxxw 
提取码:kxxw#下载直接上传到这个目录,可以把之前的备份
[root@jenkins conf]# pwd
/usr/local/maven/conf
[root@jenkins conf]# ls
logging  settings.xml  settings.xml.bak  toolchains.xml#这样maven、nexus就都配置完了,可以进行测试了
链接:https://pan.baidu.com/s/1Ht8TkYJKZotGzR3Ik3jAeQ?pwd=kxxw 
提取码:kxxw
这里面是一个war包,下载上传解压
[root@jenkins hello-world-war]# ls
dist  pom.xml  README.md  src
[root@jenkins hello-world-war]# /usr/local/maven/bin/mvn package
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Hello World Web Application Repository 1.0.0
[INFO] ------------------------------------------------------------------------
Downloading: http://10.0.0.202:8081/repository/maven-public/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom
Downloaded: http://10.0.0.202:8081/repository/maven-public/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom (8 KB at 4.1 KB/sec)
Downloading: http://10.0.0.202:8081/repository/maven-public/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom
#这样就是配置没问题,这个项目打包的依赖都是从202下载

八、分布式构建

	如果项目需要定期集成,同时每次集成都需要较长时间。如果都运行在master服务器上,会消耗过多资源,导致其他项目搁置无法集成,这时就需要在建立多台设备,并配置作为slave机器来为master提供负载服务。
1、配置
#从节点就不单独在拎出来一个服务器了,就放到neuxs服务器,当然学会怎么配置想放到那个服务器上都行
#java、git都有就不用安装了
#把jenkins服务器的sonar和maven拷贝过去
[root@jenkins local]# scp -r sonar maven 10.0.0.202:/usr/local/
[root@jenkins /]# scp -r server  10.0.0.202:/ #这个是脚本
#因为从节点肯定也是要拉取代码的,所以要把公钥复制到gitlab上
[root@nexus local]# cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDndzsUYX16oGkFAM1n7+2hmadwl+pc22XyDeyncnKzQPFd5KIzdUhHtCi6YLbGODxJkSWTbYVQiW0wPVdRtJB9CV0gPsiDTQSTdlNHQhZJ33vvKRM26Uyf5vj+pRTfgb9W+s9Gsh4eOuA6FYjQznvMLsfWsB/dqO00Ygp2le/345blF7Bp0Upts+VR0oIWrYJHbSrIUGjV070CNBl8zndqnNYJA7H+RkDXjBlV6Z6en32E+emufFB3QbyPF59vlXZ66oX3ks9ddnErbnfGWIhNaeU6qyNy9ugtAMY69mHdvwOaFjAOBLifKI2ihY1BIYBWeeCs73wnlc+Ihie3DVnL root@nexus
#先拉取一下项目通过一下指纹验证,不然构建项目的时候会有报错 git@10.0.0.200:qxl/game.git

请添加图片描述

配置jenkins,添加节点。点击系统管理拉到下面

请添加图片描述

新建节点,名称自定义。添加主机里面配置的是私钥
#把这个复制进去
[root@jenkins local]# cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA8iGi05DXUbEDrXPdR4PMwLAg0zebzx4RSwNd5o78UsRwR2Ay
ANxm1VwCGUzWLbIdYIC4cO1dbGSFx6nGrx6wP/4tGHltBjEFQuEzvSywIzW8bdRE
teFXYqHIgZoa3RbO0DotGg7AAEi/g7bAWqmY2JgoL5Gcg4Pxyf6Gd5BwduNWh

请添加图片描述

请添加图片描述

请添加图片描述

配置一下工具,配置maven忘记添加到全局工具了

请添加图片描述

请添加图片描述

构建测试,可以直接复制一个窗口,点击构建后返回到另一个窗口看结果

请添加图片描述

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

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

相关文章

AI大模型学习笔记之四:生成式人工智能(AIGC)是如何工作的?

OpenAI 发布 ChatGPT 已经1年多了&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;也已经广为人知&#xff0c;我们常常津津乐道于 ChatGPT 和 Claude 这样的人工智能系统能够神奇地生成文本与我们对话&#xff0c;并且能够记忆上下文情境。 Midjunery和DALLE 这样的AI…

ERROR: Could not build wheels for roslz4

Python bugs 最近在安装python的rosbag包时出现了诸多问题&#xff0c;特别记录下。 python版本&#xff1a;3.11 系统版本&#xff1a;Windows10 x86_64 使用conda虚拟环境进行包管理。 运行命令 pip3 install roslz4 --extra-index-url https://rospypi.github.io/simple…

奇异值分解(SVD)的应用——图像压缩

SVD方法是模型降阶的一类重要方法&#xff0c;本征正交分解&#xff08;POD&#xff09;和平衡截断&#xff08;BT&#xff09;都属于SVD类方法。 要想深入了解模型降阶技术&#xff0c;我们可以先从SVD的应用入手&#xff0c;做一个直观的了解。 1. SVD的定义和分类 我们想寻找…

【学网攻】 第(25)节 -- 帧中继(多对一)

系列文章目录 目录 系列文章目录 文章目录 前言 一、帧中继是什么&#xff1f; 二、实验 1.引入 实验目标理解帧中继在广域网中的原理及功能&#xff1b; 实验背景 技术原理 实验步骤 实验设备 实验拓扑图​编辑 实验配置 实验验证 文章目录 【学网攻】 第(1)节…

华为 huawei 交换机 接口 MAC 地址学习限制接入用户数量 配置示例

目录 组网需求: 配置思路&#xff1a; 操作步骤&#xff1a; 配置文件&#xff1a; 组网需求: 如 图 2-14 所示&#xff0c;用户网络 1 和用户网络 2 通过 LSW 与 Switch 相连&#xff0c; Switch 连接 LSW 的接口为GE0/0/1 。用户网络 1 和用户网络 2 分别属于 VLAN10 和 V…

c++之说_14|左值引用与右值引用

提起左右值引用我就头疼 左值&#xff1a; 1、在内存中开辟了空间的便叫左值 2、左值不一定可以赋值 如字符串常量 3、左值可以取地址 右值&#xff1a; 1、在内存中没有开辟空间的 2、右值无法取地址 如&#xff1a; 立即数&#xff08;1&#xff0c;2&#xff0c;3…

前后端分离nodejs+vue动态网站的图书借阅管理系统35ih5

读者模块 1)注册&#xff1a;读者输入账号、密码、确认密码、姓名、手机、身份证、邮箱&#xff0c;点击注册按钮&#xff0c;完成注册。 2)登录&#xff1a;普通读者成功输入读者账号和密码&#xff0c;点击登录按钮。 3)读者主页面&#xff1a;读者登录成功后&#xff0c;选择…

React - 分页插件默认是英文怎么办

英文组件的通用解决方案 这里以分页插件为例&#xff1a; 大家可以看到&#xff0c;最后的这个页面跳转提示文字为Go to&#xff0c;不是中文&#xff0c;而官网里面的案例则是&#xff1a; 解决方案&#xff1a; import { ConfigProvider } from antd; import zhCN from an…

【Linux】信号概念与信号产生

信号概念与信号产生 一、初识信号1. 信号概念2. 前台进程和后台进程3. 认识信号4. 技术应用角度的信号 二、信号的产生1. 键盘组合键2. kill 命令3. 系统调用4. 异常&#xff08;1&#xff09;观察现象&#xff08;2&#xff09;理解本质 5. 软件条件闹钟 一、初识信号 1. 信号…

【MySQL】MySQL表的增删改查(进阶)

MySQL表的增删改查&#xff08;进阶&#xff09; 1. 数据库约束1.1 约束类型1.2 NULL约束1.3 UNIQUE:唯一约束1.4 DEFAULT&#xff1a;默认值约束1.5 PRIMARY KEY&#xff1a;主键约束1.6 FOREIGN KEY&#xff1a;外键约束:1.7 CHECK约束&#xff08;了解&#xff09; 2. 表的设…

python健身房管理系统 django健身课程预约系统

系统所要实现的功能分析&#xff0c;对于现在网络方便的管理&#xff0c;系统要实现用户可以直接在平台上进行查看首页、健身课程、留言板、个人中心、后台管理等&#xff0c;根据自己的需求可以进行查看健身课程&#xff0c;这样既能节省用户的时间&#xff0c;不用在像传统的…

H12-821_35

35.如图所示,SWA、SWB、SWC都运行RSTP,SWB上的GEO/O/2端口和SWC上的GEO/0/1端其端口角色为? A.backup端口.Alternative端口 B.Alternative端口、Backup端口 C.Root端口、Designate端口 D.Backup端口、Root端口 答案&#xff1a;A 注释&#xff1a; 一个链路&#xff08;冲突域…