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

学习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://xiahunao.cn/news/2779272.html

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

相关文章

3秒实现无痛基于Stable Diffusion WebUI安装ComfyUI!无需重复安装环境!无需重复下载模型!安装教程

标题略有夸张的表达了接下来这一套确实很简单&#xff0c;相较于直接下载或者通过秋叶包更新而言。大大节省磁盘空间&#xff0c;和下载时间。 这篇教程不需要你有&#xff1a; 代码基础。都是复制粘贴就完事。魔法。 这篇教程默认你已经有&#xff1a; 1. 本地能够正常使用…

【计算几何】确定两条连续线段向左转还是向右转

确定两条连续线段向左转还是向右转 目录 一、说明二、算法2.1 两点的叉积2.2 两个段的叉积 三、旋转方向判别3.1 左转3.2 右转3.3 共线判别 一、说明 如果是作图&#xff0c;或者是判别小车轨迹。为了直观地了解&#xff0c;从当前点到下一个点过程中&#xff0c;什么是左转、…

Peter算法小课堂—背包问题

我们已经学过好久好久的动态规划了&#xff0c;动态规划_Peter Pan was right的博客-CSDN博客 那么&#xff0c;我用一张图片来概括一下背包问题。 大家有可能比较疑惑&#xff0c;优化决策怎么优化呢&#xff1f;答案是&#xff0c;滚动数组&#xff0c;一个神秘而简单的东西…

科普:工业物联网的八个模块,一看就明白了。

工业物联网&#xff08;Industrial Internet of Things&#xff0c;IIoT&#xff09;是将传感器、设备、网络和云计算等技术应用于工业领域的物联网应用。它由多个模块构成&#xff0c;这些模块协同工作&#xff0c;实现对工业设备和系统的监测、控制和优化。以下是工业物联网常…

根据三维点坐标使用matplotlib绘制路径轨迹

需求&#xff1a;有一些点的三维坐标&#xff08;x&#xff0c;y&#xff0c;z&#xff09;&#xff0c;需要绘制阿基米德螺旋线轨迹图。 points.txt 0.500002, -0.199996, 0.299998 0.500545, -0.199855, 0.299338 0.501112, -0.199688, 0.298704 0.501701, -0.199497, 0.298…

娱乐直播APP开发:引领潮流,创新无界

随着互联网技术的飞速发展&#xff0c;娱乐直播APP已经成为现代人生活的重要组成部分。它以其独特的互动性、即时性和个性化&#xff0c;吸引了大量用户。本文将深入探讨娱乐直播APP开发的关键要素&#xff0c;以及如何在这个竞争激烈的市场中脱颖而出。 一、娱乐直播APP的核心…

微信小程序(四十一)wechat-http的使用

注释很详细&#xff0c;直接上代码 新增内容&#xff1a; 1.模块下载 2.模块的使用 在终端输入npm install wechat-http 没有安装成功vue的先看之前的一篇 微信小程序&#xff08;二十&#xff09;Vant组件库的配置- 如果按以上的成功配置出现如下报错先输入以下语句 npm co…

Java安全 CC链1分析(Lazymap类)

Java安全 CC链1分析 前言CC链分析CC链1核心LazyMap类AnnotationInvocationHandler类 完整exp&#xff1a; 前言 在看这篇文章前&#xff0c;可以看下我的上一篇文章&#xff0c;了解下cc链1的核心与环境配置 Java安全 CC链1分析 前面我们已经讲过了CC链1的核心ChainedTransf…

数据结构——5.4 树、森林

5.4 树、森林 概念 树的存储结构 双亲表示法 孩子表示法 孩子兄弟表示法&#xff08;二叉树表示法&#xff09;&#xff1a; 二叉树每个结点有三个变量 ① 二叉树结点值&#xff1a;原树结点的值 ② 二叉树左孩子&#xff1a;原树结点的最左孩子 ③ 二叉树右孩子&#xff1a…

Acwing 5469. 有效点对【正难则反+巧妙选择根节点】

原题链接&#xff1a;https://www.acwing.com/problem/content/5472/ 题目描述&#xff1a; 给定一个 n 个节点的无向树&#xff0c;节点编号 1∼n。 树上有两个不同的特殊点 x,y&#xff0c;对于树中的每一个点对 (u,v)(u≠v)&#xff0c;如果从 u 到 v 的最短路径需要经过…

《统计学简易速速上手小册》第2章:数据探索与可视化(2024 最新版)

文章目录 2.1 数据清洗和预处理2.1.1 基础知识2.1.2 主要案例&#xff1a;电商平台的顾客购买历史数据清洗2.1.3 拓展案例 1&#xff1a;社交媒体用户行为的数据清洗2.1.4 拓展案例 2&#xff1a;金融交易数据的预处理 2.2 探索性数据分析&#xff08;EDA&#xff09;2.2.1 基础…

项目02《游戏-13-开发》Unity3D

基于 项目02《游戏-12-开发》Unity3D &#xff0c; 任务 &#xff1a;宠物系统 及 人物头像血条 首先在主面板MainPanel预制体中新建一个Panel&#xff0c; 命名为PlayerInfo 新建Image&#xff0c;作为头像 新建Slider&#xff0c;作为血条 对Panel组件添加一个水…

Java核心设计模式:代理设计模式

一、生活中常见的代理案例 房地产中介&#xff1a;客户手里没有房源信息&#xff0c;找一个中介帮忙商品代购&#xff1a;代理者一般有好的资源渠道&#xff0c;降低购物成本&#xff08;如海外代购&#xff0c;自己不用为了买东西出国&#xff09; 二、为什么要使用代理 对…

编程揭秘刘谦春晚魔术(约瑟夫环问题Josephus)

哈喽~各位过年好哇&#xff01; 相信大家应该都看了春晚刘谦表演的魔术吧&#xff0c;大家当时有没有跟着做成功呢&#xff0c;其实背后的原理很简单&#xff0c;现在我们来逐句分析&#xff0c;一起探索其中的原理吧&#xff01; 首先&#xff0c;有四张牌假设为1&#xff0…

【Rust】——猜数游戏

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

MySQL篇----第十七篇

系列文章目录 文章目录 系列文章目录前言一、对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题二、解释 MySQL 外连接、内连接与自连接的区别三、Myql 中的事务回滚机制概述前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分…

redis之布隆过滤

目录 1、redis之布隆过滤 2、布隆过滤器原理 3、布隆过滤器使用步骤 初始化bitmap 添加占坑位 判断是否存在圜 1、redis之布隆过滤 布隆过滤&#xff1a;有一个初值都为0的bit数组和多个哈希函数构成&#xff0c;用来快速判断集合中是否存在某个元素。目的&#xff1a;减…

顶级思维方式——认知篇三(财富与金钱)

目录 1、 什么是财富/财富的定义&#xff1f; 2、财富的影响 3、 财富意味着什么&#xff1f; 4、财富与幸福的关系 5、物质财富如何使用才有实际意义&#xff1f; 6、金钱的运作方式 7、【物质财富自由】后的选择 1、 什么是财富/财富的定义&#xff1f; 财富是一个多维…

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

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

移动端web开发布局

目录 flex布局&#xff1a; flex布局父项常见属性&#xff1a; flex布局子项常见属性&#xff1a; REM适配布局&#xff1a; 响应式布局&#xff1a; flex布局&#xff1a; 需要先给父类盒子设置display&#xff1a;flex flex是flexiblebox的缩写&#xff0c;意为"弹…