环境准备

主机名 IP 部署项目 作用
gitlab 10.0.0.81 Gitlab 内网的远端仓库
Jenkins 10.0.0.83 Jenkins 项目发布平台
dev01 10.0.0.82 git、nginx 开发测试用 web 服务器

注意:如果遇到出错不要着急,仔细分析是否漏了步骤,

秘钥没有给对

用户权限是否够

IP 如果不一样就要按自己的来,不一定非要是81、82、83


部署 Jenkins

# 建议内存设置 >2G
官方中文地址:https://www.jenkins.io/zh/
官方下载地址:https://jenkins.io/download/
镜像下载地址:http://mirrors.jenkins-ci.org/#上传3个文件【2个安装包,一个插件】
jdk-8u181-linux-x64.rpm     # Java
jenkins-2.99-1.1.noarch.rpm # Jenkins
plugins.tar.gz              # Jenkins插件
#安装Jenkins安装包
rpm -ivh jdk-8u181-linux-x64.rpm jenkins-2.99-1.1.noarch.rpm#配置Jenkins用户为root
vim +29 /etc/sysconfig/jenkins
JENKINS_USER="root"#启动Jenkins
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# netstat -lntp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      18924/java

Jenkins 配置文件

#Jenkins配置文件
[root@jenkins ~]# ll /etc/sysconfig/jenkins
-rw------- 1 root root 3113 2020-03-12 16:10 /etc/sysconfig/jenkins#Jenkins的家目录
[root@jenkins ~]# ll /var/lib/jenkins/ -d
drwxr-xr-x 11 jenkins jenkins 4096 2020-03-12 16:43 /var/lib/jenkins/#Jenkins日志
[root@jenkins ~]# ll /var/log/jenkins/jenkins.log
-rw-r--r-- 1 root root 25040 2020-03-12 16:43 /var/log/jenkins/jenkins.log#Jenkins的安装程序目录,WAR包会放在这里
[root@jenkins ~]# ll /usr/lib/jenkins/ -d
drwxr-xr-x 2 root root 25 2020-03-12 16:08 /usr/lib/jenkins/

Jenkins 页面初始配置

#浏览器打开Jenkins
http://10.0.0.83:8080/#依据提示查看密码,填写进web页面
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword


出现上图后根据提示在Jenkins服务器上去查找密码,填入下方空白框进行登陆
cat /var/lib/jenkins/secrets/initialAdminPassword

install suggested plugins #安装Jenkins提供的插件

select plugins to install #自定义安装需要的插件

直接关闭就可以了


点击篮框 Start using Jenkins【开始使用 Jenkins 】

接下来设置登陆密码

安装插件

手动下载

#解压之前上传的插件
[root@jenkins ~]# tar xf plugins.tar.gz
[root@jenkins ~]# mv /root/plugins/*  /var/lib/jenkins/plugins/
#重启Jenkins服务,插件才能生效
systemctl restart jenkins.service

自动下载

登陆 Jenkins 后点左上角 Jenkins 右侧的小三角》系统管理》管理插件》可更新|可选插件

Jenkins 内部变量

构建时的第一个命令,查看构建项目目录
Jenkins的内部变量可以在这里输入export或export -p 来查看
$WORKSPACE      #是当前项目代码文件的存放路径
$JOB_NAME       #是Jenkins配置中项目名称
$BUILD_NUMBER   #是当前项目此次构建的序号#所有 Jenkins 环境变量
export BUILD_CAUSE="MANUALTRIGGER"
export BUILD_CAUSE_MANUALTRIGGER="true"
export BUILD_DISPLAY_NAME="#2"
export BUILD_ID="2"
export BUILD_NUMBER="2"
export BUILD_TAG="jenkins-dzp-2"
export EXECUTOR_NUMBER="1"
export HOME="/root"
export HUDSON_COOKIE="53c4e97e-ab50-4d27-8d3d-cc0780c5c928"
export HUDSON_HOME="/var/lib/jenkins"
export HUDSON_SERVER_COOKIE="0c056f557fc12efc"
export JENKINS_HOME="/var/lib/jenkins"
export JENKINS_SERVER_COOKIE="0c056f557fc12efc"
export JOB_BASE_NAME="dzp"
export JOB_DISPLAY_URL="http://unconfigured-jenkins-location/job/dzp/display/redirect"
export JOB_NAME="dzp"
export LANG="en_US.UTF-8"
export NODE_LABELS="master"
export NODE_NAME="master"
export OLDPWD
export PATH="/sbin:/usr/sbin:/bin:/usr/bin"
export PWD="/var/lib/jenkins/workspace/dzp"
export ROOT_BUILD_CAUSE="MANUALTRIGGER"
export ROOT_BUILD_CAUSE_MANUALTRIGGER="true"
export RUN_CHANGES_DISPLAY_URL="http://unconfigured-jenkins-location/job/dzp/2/display/redirect?page=changes"
export RUN_DISPLAY_URL="http://unconfigured-jenkins-location/job/dzp/2/display/redirect"
export SHELL="/bin/bash"
export SHLVL="3"
export WORKSPACE="/var/lib/jenkins/workspace/dzp"
export _="/etc/alternatives/java"

Jenkins 自由风格项目

1.创建项目【自由风格】

登陆后点击创建一个新任务

下图中3个是常用的项目选项
构建一个自由风格的软件项目
构建一个maven项目
Pipeline# 这里我选了第一个自由风格,输入项目名称后点击下方确定按钮创建项目


项目创建好了以后可以点下图进入项目

2.配置项目

点击配置,开始配置项目

项目名称和项目记录保留时间

源码管理【设置从哪里获取源码,先选默认有需要再来改】

构建

构建时可以选择很多,这里也可以执行脚本 /bin/bash /scripts/depoly.sh这里我选择常用的 shell 命令为了知道构建的时候我们是在哪个目录下执行的 shell 命令
第一个命令,查看构建项目目录
pwd

保存配置

3.构建项目

点击立即构建

查看构建状态【蓝色圆点表示成功】

点击上图三角形,选择下图选项

配置的构建命令显示出了项目的目录地址

Jenkins 构建部署新代码

1.码云网站获取代码

去码云网站搜索一个项目【幸运大转盘】

在Gitlab网站新建一个项目,导入码云的代码地址

https://gitee.com/lovexzq/XingYunDaZhuanPan.git


进入my项目

复制项目地址

2.在 dev01 上部署 web

# 将大转盘项目克隆到 dev01 主机
[root@dev01 ~]# git clone git@10.0.0.72:OPS/dzp.git
Cloning into 'dzp'...
remote: Counting objects: 19, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 19 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (19/19), 104.36 KiB | 0 bytes/s, done.
Resolving deltas: 100% (2/2), done.
[root@dev01 ~]# ls dzp
css  img  js  lottery.html  README.md
# 创建站点目录
[root@dev01 ~]# mkdir -p /data/code
# 拷贝站点文件
[root@dev01 ~]# cp dzp /data/code
# 安装 nginx
[root@dev01 ~]# yum -y install nginx
# 创建站点配置文件
[root@dev01 ~]# vim /etc/nginx/conf.d/dzp.com.conf
server {listen 80;server_name dzp.com;location / {root /data/code/dzp;index lottery.html;}
}
# 启动 nginx
[root@dev01 dzp]# systemctl restart nginx
# 在 windows 电脑上配置解析
打开 C:\Windows\System32\drivers\etc 文件,在最后一行添加
10.0.0.82 dzp.com
# 访问 dzp.com

3.通过 构建 部署新代码

打开 Jenkins 中 dazhuanpan-job 项目的配置

输入 gitlab 的 dzp 项目的地址,可能会报错

错误1

错误2

如出现上图错误

解决办法:在 jenkins 主机的命令行执行一次报错提示的命令,然后输入 yes
[root@jenkins ~]# yum -y install git
[root@jenkins ~]# git ls-remote -h git@10.0.0.81:OPS/my.git
The authenticity of host '10.0.0.72 (10.0.0.72)' can't be established.
ECDSA key fingerprint is SHA256:7IhnCxlNU3w32uWBSRhgqvkeqp/ZRFRkKNdsZxp3zPA.
ECDSA key fingerprint is MD5:bb:63:f4:3a:f0:2f:dc:39:d5:b5:5c:99:9a:43:70:5a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.72' (ECDSA) to the list of known hosts.
git@10.0.0.72's password: 如果提示输密码,这是因为没有将 Jenkins 的 key 交给 gitlab
#创建ssh公钥
[root@jenkins ~]# ssh-keygen -t rsa
#显示公钥内容
[root@jenkins ~]# cat ~/.ssh/id_rsa.pub

打开 gitlab 的 dzp 项目粘贴 Jenkins 的 key 点击 Add key 确定添加

# 之前添加过 KEY 的效果如下
[root@jenkins ~]# git ls-remote -h git@10.0.0.81:OPS/my.git
The authenticity of host '10.0.0.81 (10.0.0.81)' can't be established.
ECDSA key fingerprint is SHA256:t/wRHxVb4zTEg6b4AblQmCGpMe4GD3tvRh4cPncimpw.
ECDSA key fingerprint is MD5:cc:13:73:1f:00:53:2e:20:d9:81:4e:11:6f:31:b6:6f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.81' (ECDSA) to the list of known hosts.
3935eb759d27d62b2afbc0526b778c499a8d8c1b    refs/heads/master

在 Jenkins 的 dazhuanpan-job 项目配置中先删除刚刚输入 gitlab 的 dzp 项目的地址,在空白处点一下,然后重新输入 gitlab 的 dzp 项目的地址

成功

保存配置

点击 立即构建

出现蓝色小球就表示构建成功,查看构建内容

到 Jenkins 主机查看文件
[root@jenkins ~]# ll /var/lib/jenkins/workspace/dazhuanpan-job
total 8
drwxr-xr-x 2 root root   25 2021-11-30 17:25 css
drwxr-xr-x 2 root root   84 2021-11-30 17:25 img
drwxr-xr-x 2 root root   41 2021-11-30 17:25 js
-rw-r--r-- 1 root root 2170 2021-11-30 17:25 lottery.html
-rw-r--r-- 1 root root  113 2021-11-30 17:25 README.md之前 dzp.com 的站点文件是手动在 gitlab 项目上克隆的现在我想点一下 Jenkins 项目的【立即构建】就可以发布新的代码,打算通过脚本实现实现步骤如下:1、需要 Jenkins 的公钥交给 dev01 主机,实现Jenkins与dev01的沟通
[root@jenkins ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.84
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '10.0.0.84 (10.0.0.84)' can't be established.
ECDSA key fingerprint is SHA256:7IhnCxlNU3w32uWBSRhgqvkeqp/ZRFRkKNdsZxp3zPA.
ECDSA key fingerprint is MD5:bb:63:f4:3a:f0:2f:dc:39:d5:b5:5c:99:9a:43:70:5a.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.0.0.84's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'root@10.0.0.84'"
and check to make sure that only the key(s) you wanted were added.2、在Jenkins主机建一个脚本目录存放脚本
[root@jenkins ~]# mkdir -p /data/scripts3、创建脚本实现发布代码至 dev01
[root@jenkins ~]# vim /data/scripts/depoly.sh
#!/bin/bash
# 设置dev01主机的IP
Web_Ip=10.0.0.84
# Jenkins项目构建时的前一次序号
BUILD_NUMBER=$(( $BUILD_NUMBER - 1 ))
# 旧站点代码存放目录
Old_Code_Dir=${WORKSPACE##*/}_$BUILD_NUMBER
# -d 判断dev01站点代码目录是否存在,不存在就 mkdir 创建
ssh root@$Web_Ip "[ -d /opt/$Old_Code_Dir ] || mkdir -p /opt/$Old_Code_Dir"
# 将 dev01 主机旧的代码进行移动到别的目录
ssh root@$Web_Ip "mv /data/code/dzp/* /opt/$Old_Code_Dir/"
# 将代码拷贝到站点目录
scp -rp $WORKSPACE/* root@${Web_Ip}:/data/code/dzp上面脚本中用到了一些变量
Jenkins 的内部变量可以在脚本项目的构建中输入 export 或 export –p 来查看
$WORKSPACE          #是Jenkins配置中源码管理中的项目代码保存的地址+文件名
$JOB_NAME           #是Jenkins配置中源码管理中的项目代码的文件名
$BUILD_NUMBER       #当前构建的序号4、将代码放入 Jenkins 项目 dazhuanpan-job 配置 的 构建 中
添加如下命令
/bin/bash /data/scripts/depoly.sh

点击 Jenkins 项目 dazhuanpan-job 的 立即构建

构建成功后,点击画面中的蓝色小球查看构建步骤

再去 dev01 主机上确认

[root@dev01 ~]# ll /opt/
total 0
drwxr-xr-x 3 root root 17 2021-12-07 10:00 dazhuanpan-job_10
为了更直观的看出代码变更,我们手动修改一下代码# 先删除原来的仓库目录,再克隆gitlab上的代码
[root@dev01 ~]# ls
dzp
[root@dev01 ~]# rm -rf dzp
[root@dev01 ~]# git clone git@10.0.0.81:OPS/dzp.git
# 在一等奖后面添加几个字
[root@dev01 ~]# vim /root/dzp/lottery.html
<p>一等奖 运气爆棚</p>
# 推送给gitlab
[root@dev01 dzp]# git add .
[root@dev01 dzp]# git commit -m '一等奖 运气爆棚'
[root@dev01 dzp]# git push -u origin master

在 Jenkins 的 dazhuanpan-job 项目中点击【立即构建】

在去网页刷新 dzp.com

部署自动代码上线

Jenkins 构建实现代码更新已经完成了

再进一步,实现推送新代码到gitlab仓库就自动让新代码上线

1.部署 自动触发代码上线

自动代码上线:
是指程序员在自己的主机上推送代码到Gitlab服务器的远程仓库后
就可以自动触发Jenkins服务器的构建
然后就可以通过执行脚本将新代码发送到web服务器上Jenkins 网页上依次点击和复制
1、项目名称
2、配置
3、构建触发器
4、勾选 Build when a change is pushed to GitLab. ......
5、复制 http://10.0.0.83:8080/project/dazhuanpan-job
6、注意有一个按钮 【高级】点开
7、点选 Filter branches by name
8、点击按钮 Generate
9、复制 生成的一串字符
10、点击按钮 保存

注意这里需要点击按钮【高级】,才会有完整的下图,复制好地址和字符后,记得保存。

# 2种报错
1、没保存就去下面粘贴,肯定不行。2、Gitlab 上创建了新项目,但是项目并没有提交内容# 构建执行失败,确保项目至少有一次提交
Hook execution failed: Ensure the project has at least one commit.
有时候失败要注意登陆 Gitlab 的用户在 dzp 项目中的权限,建议测试的时候给管理员权限Gitlab上配置,将Jenkins配置中刚刚复制的2个内容填入下图位置
第一行填 http://10.0.0.83:8080/project/dazhuanpan-job
第二行填 生成的好多字符


点击上图的绿色按钮确认添加自动触发设置
再点击下图红框

弹出200就表示触发设置正确

这时候自动代码上线就成功了

需要再添加一个功能,让程序猿知道自己的新代码上线成功了

2.自动触发代码上线反馈

Gitlab上设置,点击绿色按钮生成最下方字符串

来到Jenkins首页,点击系统管理

向下找到系统设置

按下图数字顺序进行设置

点击上图4要粘贴上方刚刚生成的字符串,然后点上图5

测试设置

保存配置

再来到Jenkins项目中进行配置


再到Jenkins项目中点击立即构架测试自动反馈

再到Gitlab上查看反馈效果,有绿色勾就表示反馈正常

点击绿色勾查看详细信息

Gitlab网页上的小图标也能看出来

3、在 dev01 上传新代码测试

# 修改 三等奖为 1000 元
[root@dev01 dzp]# vim lottery.html
<p>1000元充值卡</p># 推送到 gitlab
[root@dev01 dzp]# git add .
[root@dev01 dzp]# git commit -m '三等奖 1000 元'
[root@dev01 dzp]# git push -u origin master# 打开 dzp.com 查看网站新内容

Jenkins Maven 项目

1.介绍 Maven

Maven是一个编译器,可以编译Java项目,Java开发员用的很多
是一个项目管理的综合工具,可以把项目打成一个war或JAR包
是Apache【httpd】下的一个开发工具

2.安装 Maven【Jenkins主机】

#Jenkins主机上操作
Maven安装包来源
官网:            http://maven.apache.org/download.cgi
清华镜像:        https://mirrors.tuna.tsinghua.edu.cn/apache/maven/
apache-maven-3.3.9-bin.tar.gz                   #安装包文件
tar xf apache-maven-3.3.9-bin.tar.gz            #解压安装包
mv apache-maven-3.3.9 /usr/local/maven-3.3.9    #移动文件位置
ln -s /usr/local/maven-3.3.9 /usr/local/maven   #创建一个软链接
#添加环境变量,才可以使用mvn命令
echo "export PATH=/usr/local/maven/bin/:$PATH" >>/etc/profile
source /etc/profile                             #立即生效环境变量
mvn –v                                          #查看Maven版本信息Maven命令
mvn test        #测试
mvn package     #打包编译
mvn clean       #清除上一次编译缓存
mvn install     #打包和部署项目到本地资源库
更多Maven资料https://www.yiibai.com/maven/

3.安装 Tomcat【Tomcat主机】

#Tomcat主机上操作
-------------------------------------------------------------------
Tomcat介绍
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。【详细介绍百度一下Tomcat】
-------------------------------------------------------------------
#安装Tomcat
Tomcat需要Java环境所以安装Tomcat需要
jdk-8u181-linux-x64.rpm     #Java安装包
apache-tomcat-8.0.27.tar.gz #Tomcat安装包[root@tomcat ~]# ll
total 174960
-rw-r--r-- 1 root root   9128610 Mar 27  2019 apache-tomcat-8.0.27.tar.gz
-rw-r--r-- 1 root root      1456 Mar 15 17:33 hostname_ip.sh
-rw-r--r-- 1 root root 170023183 Aug 14  2018 jdk-8u181-linux-x64.rpm
[root@tomcat ~]# rpm -ivh jdk-8u181-linux-x64.rpm
[root@tomcat ~]# mkdir /application            #实际生产中习惯放在这个应用目录中
[root@tomcat ~]# tar xf apache-tomcat-8.0.27.tar.gz -C /application/
[root@tomcat ~]# ln -s /application/apache-tomcat-8.0.27/ /application/tomcat#配置Tomcat启动加速,117行最后的“random”改为“urandom”
[root@tomcat ~]# vim /usr/java/jdk1.8.0_181-amd64/jre/lib/security/java.security
securerandom.source=file:/dev/urandom
#启动Tomcat
[root@tomcat ~]# /application/tomcat/bin/startup.sh
[root@tomcat ~]# netstat -lntp | grep 8080
tcp6  0  0 :::8080  :::*  LISTEN  9691/java
#浏览器访问10.0.0.85:8080

4.开发用户安装 Maven【dev01主机】

#dev01主机上操作
-------------------------------------------------------------------
开发用户主机需要安装Git、Java、Maven
yum install -y git                              #安装Git
rpm -ivh jdk-8u181-linux-x64.rpm                #安装Java
apache-maven-3.3.9-bin.tar.gz                   #Maven安装包文件
tar xf apache-maven-3.3.9-bin.tar.gz                #解压Maven安装包
mv apache-maven-3.3.9 /usr/local/maven-3.3.9    #移动Maven文件位置
ln -s /usr/local/maven-3.3.9 /usr/local/maven       #创建一个Maven软链接
#添加环境变量,才可以使用mvn命令
echo "export PATH=/usr/local/maven/bin/:$PATH" >>/etc/profile
source /etc/profile                             #立即生效环境变量
mvn –v                                      #查看Maven版本信息
环境准备好了,开始上传代码包jeesns.tar.gz【小说阅读网站代码包】
[root@dev01 ~]# tar xf jeesns.tar.gz               #解压代码包
[root@dev01 ~]# cd jeesns/                 #进入代码目录
[root@dev01 ~/jeesns]# git remote              #查看远程仓库
origin
[root@dev01 ~/jeesns]# git remote remove origin    #删除远程仓库【如果原来有远程仓库】
[root@dev01 jeesns]# ll jeesns-web/                #jeesns的数据
total 4
drwxr-xr-x 2 root root  113 Nov 19  2018 database
drwxr-xr-x 2 root root   49 Nov 19  2018 doc
-rwxr-xr-x 1 root root 1443 Nov 19  2018 pom.xml    #只要是Java代码几乎都有这个文件
drwxr-xr-x 3 root root   18 Nov 19  2018 src
[root@dev01 jeesns]# ll jeesns-web/database/
total 40
-rwxr-xr-x 1 root root 28667 Nov 19  2018 jeesns.sql        #数据库文件
-rw-r--r-- 1 root root  3491 Nov 19  2018 update_1.2.0to1.2.1.sql
-rw-r--r-- 1 root root  1026 Nov 19  2018 update_1.2.1to1.3.sql
-rw-r--r-- 1 root root  1344 Nov 19  2018 update_1.3to1.3.1.sql#将jeesns.sql数据库文件传送到Tomcat主机
[root@dev01 jeesns]# scp -rp jeesns-web/database/jeesns.sql root@10.0.0.85:#去官方的中央数据仓库下载最新的数据,然后进行编译war包
[root@dev01 ~/jeesns]# mvn package
[root@dev01 ~/jeesns]# ll jeesns-web/target/jeesns-web.war
-rw-r--r-- 1 root root 26106017 2020-03-13 16:35 jeesns-web.war
#推送war包到Tomcat主机
scp -rp jeesns-web.war root@10.0.0.85:/application/tomcat/webapps/ROOT.war
-------------------------------------------------------------------

5.安装数据库【Tomcat主机】

#Tomcat主机上操作
-------------------------------------------------------------------
#安装数据库、启动数据库、设置数据库密码
[root@tomcat ~]# yum install -y mariadb-server
[root@tomcat ~]# systemctl start mariadb.service
[root@tomcat ~]# mysqladmin password "root"
#登陆数据库
[root@tomcat ~]# mysql -uroot -proot
MariaDB [(none)]> create database jeesns;    #创建jeesns库
exit        #退出数据库
#导入jeesns数据库
[root@tomcat ~]# mysql -uroot -proot jeesns < jeesns.sql
#查看导入情况
[root@tomcat ~]# mysql -uroot -proot
MariaDB [(none)]> use jeesns;        #进入jeesns库
MariaDB [jeesns]> show tables;       #查看jeesns库中的表
exit
#查看小说阅读网站的war包是否传输过来
[root@tomcat ~]# ll /application/tomcat/webapps/ROOT.war
-rw-r--r-- 1 root root 26106017 Mar 13 16:41 /application/tomcat/webapps/ROOT.war
#重新打开网页
http://10.0.0.85:8080/
默认用户名:admin     密码:jeesns

如果打不开,就查看Tomcat是否启动、数据库是否启动,数据库文件是否导入
/application/tomcat/bin/startup.sh  #启动Tomcat
以上 2-5 是Tomcat服务器搭建阅读网站的过程

6.创建 Jeesns 项目

首先在Gitlab网站上创建一个jeesns项目
dev01主机上操作
在开发人员dev01主机上设置jeesns项目的远程仓库
[root@dev01 ~]# rz jeesns.tar.gz               #先上传代码包到dev01主机
[root@dev01 ~]# tar xf jeesns.tar.gz           #解压代码包
[root@dev01 ~]# cd jeesns/
[root@dev01 ~/jeesns]# git remote              #查看远程仓库
origin
[root@dev01 ~/jeesns]# git remote remove origin    #删除远程仓库【如果原来有远程仓库】
[root@dev01 jeesns]# mvn clean                 #每次使用都需要先清空之前的编译
#添加远程仓库
[root@dev01 ~/jeesns]# git remote add origin git@10.0.0.81:OPS/jeesns.git
#先上传代码到本地仓库
[root@dev01 ~/jeesns]# git add .
[root@dev01 ~/jeesns]# git commit -m "上传jeesns代码"
#上传代码到远程仓库
[root@dev01 jeesns]# git push -u origin master
#如果出现下列提示
remote: GitLab: You are not allowed to push code to protected branches on this project.
不允许将代码推送到此项目上受保护的分支【百度翻译】
#去gitlab网页解决错误
gitlab网页上操作
#dev01主机推送错误的解决办法

1、可能是dev01用户权限不够,设置成master或者owner

2、查看jeesns项目的分支保护是否开启


如果有保护就点击上图的Unprotect按钮进行删除

Jenkins网页和主机上操作
创建一个Maven项目

上图的错误是因为jeesns主机没有权限访问gitlab网站的jeesns项目
解决办法如下图
jeesns主机上设置秘钥对
[root@jenkins ~]# ssh-
[root@jenkins ~]# cat .ssh/id_rsa.pub
1、在gitlab的jeesns项目设置中填写名称【随意】和Jenkins主机的公钥

#如果原来没有设置过Jenkins主机的公钥那还需要执行下图中蓝色部分的命令

解决办法:在命令行执行一次报错提示的命令
[root@jenkins ~]# git ls-remote -h git@10.0.0.81:OPS/jeesns.git
The authenticity of host ‘10.0.0.81 (10.0.0.81)’ can’t be established.
ECDSA key fingerprint is SHA256:t/wRHxVb4zTEg6b4AblQmCGpMe4GD3tvRh4cPncimpw.
ECDSA key fingerprint is MD5:cc:13:73:1f:00:53:2e:20:d9:81:4e:11:6f:31:b6:6f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘10.0.0.81’ (ECDSA) to the list of known hosts.
3935eb759d27d62b2afbc0526b778c499a8d8c1b refs/heads/master
2、如果原来设置过Jenkins主机的公钥只需要点击下图的Enable按钮

jeesns项目添加Jenkins主机公钥成功后如下图

错误解决之后将原来的gitlab项目地址删除后重新粘贴一下

设置Build会发现报错找不到maven,先填写clean package后保存配置
clean和package就是先清除上一次编译缓存再进行打包编译
mvn clean #清除上一次编译缓存
mvn package #打包编译

去【主页>系统管理>全局安全配置】解决上图的报错问题



返回Jenkins的项目maven-jeesns-job配置中查看报错已经没了

接下来就可以点击maven-jeesns-job项目的【立即构建】来创建war包

如果构建成功就可以在Jenkins主机上看到jeesns-web.war文件
ll /var/lib/jenkins/workspace/maven-jeesns-job/jeesns-web/target/
-rw-r–r-- 1 root root 26106035 2020-03-13 17:21 jeesns-web.war
#如果构建时出现下图错误,就需要再次进行构建,因为这是网络连接造成的错误

接下来编写一个脚本用来实现新代码上线
脚本涉及到推送文件,就需要将Jenkins主机的公钥先推送到Tomcat主机上
ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.85
[root@jenkins ~]# mkdir -p /scripts/
[root@jenkins ~]# vim /scripts/jeesns_depoly.sh
-------------------------------------------------------------------
#!/bin/bash
Web_Ip=10.0.0.85
Code_Dir=/application/tomcat/webapps
Old_Code_Dir=${JOB_NAME}_$(($BUILD_NUMBER - 1 ))
#1.判断目录是否存在
ssh root@$Web_Ip "[ -d /opt/$Old_Code_Dir ] || mkdir -p /opt/$Old_Code_Dir"
#2.将旧的war包进行移动保存
ssh root@$Web_Ip "mv $Code_Dir/ROOT.war  /opt/$Old_Code_Dir"
#3.将新编译的war包进行传送到站点目录
scp -rp $WORKSPACE/jeesns-web/target/jeesns-web.war root@$Web_Ip:$Code_Dir/ROOT.war
-------------------------------------------------------------------

设置构建后命令

通过上面的脚本可以知道
#旧war包存放位置
[root@tomcat ~]# ll /opt/
drwxr-xr-x 2 root root 22 Mar 17 13:23 jeesns_4
#新war包存放位置
[root@tomcat ~]# ll /application/tomcat/webapps
-rw-r--r--  1 root root 26105966 Mar 17 13:22 ROOT.war#查看Tomcat和数据库 启动没有,没有就启动一下,然后就可以查看新代码的网页效果了
[root@tomcat ~]# netstat -lntp | grep 8080
[root@tomcat ~]# /application/tomcat/bin/startup.sh
[root@tomcat ~]# systemctl start mariadb
#新代码网页效果
http://10.0.0.85:8080/manage/index

Jenkins 创建 Pipeline 项目

1. 基础概念

CI/CD持续集成/持续部署持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。比如:装修厨房铺地砖,边角地砖要切割大小。如果一次全切割完再铺上去,发现尺寸有误的话浪费和返工时间就大了,不如切一块铺一块。这就是持续集成。持续部署(continuous deployment)是通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,毕竟快速运转的互联网公司人力成本会高于机器,投资机器优化开发流程化相对也提高了人的效率。
比如:装修厨房有很多部分,每个部分都有检测手段,如地砖铺完了要测试漏水与否,线路铺完了要通电测试电路通顺,水管装好了也要测试冷水热水。如果全部装完了再测,出现问题可能会互相影响,比如电路不行可能要把地砖给挖开……。那么每完成一部分就测试,这是持续部署。持续交付 Continuous Delivery:频繁地将软件的新版本,交付给质量团队或者用户,以供评审尽早发现生产环境中存在的问题;如果评审通过,代码就进入生产阶段.比如:全部装修完了,你去验收,发现地砖颜色不合意,水池太小,灶台位置不对,返工吗?所以不如每完成一部分,你就去用户那试用验收,这就是持续交付。#敏捷思想中提出的这三个观点,还强调一件事:通过技术手段自动化这三个工作。加快交付速度。Jenkins 2.0的精髓是Pipeline as Code,是帮助Jenkins实现CI到CD转变的重要角色。什么是Pipeline,简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。Pipeline 是一个用户定义的 CD 流水线模式。Pipeline 代码定义了通常包含构建、测试和发布步骤的完整的构建过程。Node 是一个机器,它是 Jenkins 环境的一部分,并且能够执行 Pipeline。同时,node 代码块也是脚本式Pipeline 语法的关键特性。Stage 块定义了在整个 Pipeline 中执行的概念上不同的任务子集(例如"构建","测试"和"部署"阶段),许多插件使用它来可视化或呈现 Jenkins 管道状态/进度。Step 一项任务。从根本上讲,一个步骤告诉 Jenkins 在特定时间点(或过程中的"步骤")要做什么。例如,使用sh step:sh 'make' 可以执行 make 这个 shell 命令。

2. 创建 Pipeline 项目

Jenkins file 分为:声明式、脚本式

  1. 创建项目
将下方代码复制进pipeline
脚本式语法格式如下:
----------------------------------------------
pipeline{agent any
stages{stage("get code"){steps{echo "get code from scm"}}stage("package"){steps{echo "packge code"}}stage("deploy"){steps{echo "deploy packge to node1"}}}
}
----------------------------------------------


通过下图的各个环节可以看出每个环节的具体信息,如果有错可以很直观的看出是哪里出的错。

用大转盘项目做一个测试,如果是第一次还需要将报错中的命令在xshell中执行一次

将上图中的 Jenkinsfile 复制下来后去Jenkins页面打开下图

将刚刚复制的名称和之前的代码填入下图对应位置

按这里提交新添加的新文件
再次来到Jenkins页面进入Pipeline项目点击 立即构建

  1. 自动代码上线
    在Jenkins页面点击刚刚创建的文件编辑自动代码上线的内容

代码1
-------------------------------------------------
pipeline{agent any
stages{stage("get code"){steps{echo "get code"}}stage("unit test"){steps{echo "unit test"}}stage("package"){steps{sh 'tar zcf /opt/web-${BUILD_ID}.tar.gz ./* --exclude=./.git --exclude=Jenkinsfile'}}stage("deploy"){steps{sh 'ssh 10.0.0.80 "mkdir /opt/web-${BUILD_ID}"'sh 'scp /opt/web-${BUILD_ID}.tar.gz 10.0.0.80:/opt'sh 'ssh 10.0.0.80 "tar xf /opt/web-${BUILD_ID}.tar.gz -C /code"'}}
}
}
-------------------------------------------------
代码2(将代码1的打包命令和推送代码命令放入了脚本中)
-------------------------------------------------
pipeline{agent any
stages{stage("get code"){steps{echo "get code"}}stage("unit test"){steps{echo "unit test"}}stage("package"){steps{echo "packge code"}}stage("deploy"){steps{sh '/bin/bash /scripts/dzp.sh'}}
}
}
-------------------------------------------------
脚本内容如下:
[root@jenkins ~]# vim /scripts/dzp.sh
-------------------------------------------------------------
#!/bin/bash
web_ip=10.0.0.84
build=$(($BUILD_NUMBER - 1))
old_code_dir=${JOB_NAME}_$build
echo $old_code_dir
ssh root@$web_ip "[ -d $old_code_dir ] || mkdir -p /opt/$old_code_dir"
#1、将旧的代码移动到别的目录
ssh root@$web_ip "mv /code/dzp/* /opt/$old_code_dir"
#2、移动新的代码到站点目录
scp -rp $WORKSPACE/* root@${web_ip}:/code/dzp
-------------------------------------------------------------

准备完成立即构建,报错了,可以很清楚的找到在哪一步出错

根据错误提示去解决主机秘钥验证失败的问题
脚本中有推送文件的命令,那就是Jenkins推送文件到web服务器验证失败
手动推送一次Jenkins公钥到web服务器就OK 了

Devops 05 Jenkins相关推荐

  1. AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署

    AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署 Amazon ElastiCache 连接至 Redis 节点 通过 AWS Command Line Inter ...

  2. DevOps整合Jenkins+k8s

    目录 一.DevOps介绍 二.安装git工具 三.安装jdk .maven.Jenkins 四.Jenkins实现基础的拉取操作 五.Jenkins实现-sonarqbue 代码质量检测部署 六.J ...

  3. DevOps之五Jenkins

    1.安装jdk 更换阿里源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.rep ...

  4. 【DevOps】Jenkins:配置jenkins 流水线/多分支流水线任务构建成功通知企业微信@相关人

    目录 视频教程 需求说明 最终效果 实现过程 安装插件 编写shell 编写jenkinsfile 测试一下 视频教程 视频教程:https://edu.csdn.net/learn/38191/60 ...

  5. 【DevOps】Jenkins:jenkins重置管理员密码

    修改配置文件可以避免端口号冲突或者指定一个日志输出位置等,给大家提个醒,做之前请做好备份!!! 使用YUM方式安装的jenkins默认的配置文件是在/etc/sysconfig/jenkins 1.打 ...

  6. 【DevOps】Jenkins+Git+Gitlab+Sonar+Nexus实现持续集成

    文章目录 什么是持续集成?CI/CD指的是什么? 如何实现持续集成 一.筹备工作,CentOS 7.6系统 1.安装JDK,配置环境变量 2.Maven下载 3.Git安装 4.GitLab安装 5. ...

  7. Jenkins 升级、迁移、备份

    1.升级 下载新版Jenkins.war文件,替换旧版本war文件,重启即可. Jenkins.war文件的位置一般为/usr/lib/jenkins/Jenkins.war. 2.迁移.备份 Jen ...

  8. kubernetes之CI/CD工具jenkins第二篇,helm的使用

    1. kubernetes之CI/CD第二篇-jenkins结合helm部署应用: 1. 概述:    在前期的博文中我已经初步介绍过kubernetes环境下的CI/CD的使用.主要是jenkins ...

  9. (四)使用Jenkins工作流链接MLOps管道

    目录 构建Jenkins工作流 工作流程1 工作流程2 工作流程3 工作流程5 使用GitHub Webhooks触发工作流 下一步 在这里,我们构建了四个自动化的Jenkins工作流程. 在之前的系 ...

  10. (三)设置Jenkins为MLOps构建CI/CD管道

    目录 Jenkins简介 安装Jenkins插件 配置电子邮件通知 在Jenkins中设置GCP凭据 下一步 在这里,我们配置Jenkins以帮助我们将Docker容器链接到一个实际的管道中,容器将在 ...

最新文章

  1. vim windows linux文件格式转换
  2. 黑盒测试方法之等价类划分法
  3. ubuntu系统声音_今日热闻 | 小米11有望首发骁龙875、折叠iPhone测试、新规禁止网购忽悠打折、印度真米粉、M1 Mac运行Ubuntu...
  4. 【译】Swift算法俱乐部-Boyer-Moore字符串搜索
  5. zcmu1734: 18岁
  6. mysql 视图 查询速度慢_mysql 视图查询速度慢
  7. java mysql防重复提交_防止数据重复提交的6种方法(超简单)!
  8. java算法:冒泡排序
  9. 【转】一个ASP.NET MVC中ajax调用WebApi返回500 Internal Server Error的调错方法。
  10. 多链路及服务器负载均衡原理与设备构建方案
  11. lua 区间比较_TI-Lua 系列教程2.4.1: 条件分支
  12. android四大组件小整
  13. [it-ebooks]电子书列表
  14. 第一次的爬虫小试(爬取网页文本)
  15. 变色龙引导r2795
  16. ios 检查设备距离与电池状态及判断是否是Retina显示屏
  17. python flask豆瓣微信小程序案例
  18. AI插画师:生成对抗网络
  19. 0.4-如何使用DAP LINK 下载Hex程序?
  20. 运行 RoCEv2 的网络注意事项

热门文章

  1. manjaro踩坑记
  2. 如何用用计算机名访问共享打印机,局域网怎么连接共享打印机共享
  3. 提取swf素材_网页游戏素材提取工具及提取教程
  4. Win10操作系统下,如何确定电脑位数(图文教程)
  5. matlab中的fig文件怎么编辑,matlab fig文件的操作
  6. EXCEL的各种“空”的区别:blank,““ , 0 ,以及 VBA里的各种空值:empty,null,nothing 等
  7. Linux搭建测试环境
  8. 面试官问:如何搭建测试环境?掌握这5种技能和知识就够了
  9. 微支付开发(.net)
  10. 本地摄像头应用到远程计算机,远程摄像头设置