-使用Jenkins创建新项目
点击保存
创建新项目完成
-将代码发布到web服务器
可以通过执行命令或脚本的方式进行代码发布,使用 root 用户在各个 web 服务器上发布代码。也可以建立一些普通用户如果www或apache 来发布。如果使用普通用户发布代码,要保持所有服务器上的用户id一致,这样没有权限的问题。这里直接使用 root 用户来发布。
******(1)为apache主机安装httpd [root@Centos7 ~]# hostnamectl set-hostname apache [root@Centos7 ~]# su [root@apache ~]# systemctl stop firewalld [root@apache ~]# setenforce 0 setenforce: SELinux is disabled [root@apache ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 mount: /dev/sr0 已经挂载或 /mnt 忙 /dev/sr0 已经挂载到 /mnt 上 [root@apache ~]# yum -y install httpd 。。。。。。 完毕! [root@apache ~]# systemctl start httpd
先测试一下,成功访问
******(2)配置免密认证,所有需要jenkins自动发布代码的服务器都需要进行免密认证 [root@jenkins ~]# ssh-copy-id 192.168.100.204 #发送公钥 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be ins talled: "/root/.ssh/id_rsa.pub" The authenticity of host '192.168.100.204 (192.168.100.204)' can't be established. ECDSA key fingerprint is SHA256:VhTZ5YxS5af2rHtfCvyc6ehXh3PD2A8KY2MyE6rHjiU. ECDSA key fingerprint is MD5:e8:41:d2:8a:7e:e9:a9:47:a3:f0:29:be:e9:6d:df:51. 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@192.168.100.204's password: #输入204密码 Number of key(s) added: 1 Now try logging into the machine, with: "ssh '192.168.100.204'" and check to make sure that only the key(s) you wanted were added. [root@jenkins ~]# ssh 192.168.100.204 #登录204 Last login: Thu Jul 1 00:38:03 2021 [root@apache ~]# exit #成功免密 登出 ******(3)创建自动上传文件的脚本 [root@jenkins ~]# vim aaa.sh #!/bin/bash scp /var/lib/jenkins/workspace/aaa/* root@192.168.100.204:/var/www/html #这里需要看一下自己的仓库名称是什么 #保存退出 [root@jenkins ~]# chmod +x aaa.sh #添加可执行权限 [root@jenkins aaa]# pwd /var/lib/jenkins/workspace/aaa [root@jenkins aaa]# ll 总用量 4 -rw-r--r-- 1 root root 16 6月 30 16:32 1.html [root@jenkins aaa]# cat 1.html aaaaaaaaaaaaaaaa
(4)把脚本添加到jenkins
访问204的httpd测试结果
******先到204上,发现脚本的操作成功执行 [root@apache ~]# ll /var/www/html/ 总用量 4 -rw-r--r-- 1 root root 16 7月 1 00:53 1.html [root@apache ~]# cd /var/www/html/ [root@apache html]# mv 1.html index.html #这里修改了一下网页名称,不然访问不到,可以在gitlab上修改一下名称
成功访问!!!
可以在gitlab去修改文件名称和内容,再次进行测试
发现web页面变成了修改的内容!!
三、实战项目
(1)更新gitlab代码触发jenkins自动部署
实际场景: 在公司的测试环境当中,当开发人员向 gitlab 仓库提交代码后,gitlab 自动通知 jenkins进行构建项目、代码质量测试然后部署至测试环境,这里先暂时部署到测试环境。对于生产环境,后期使用手动部署代码。
需要安装的插件: (有的默认已经安装,可以在已安装的搜索栏搜索一下)
Gitlab Hook Plugin(之前已经安装过)
Build Authorization
Token Root 和 Build Token Trigger
-配置身份验证令牌
******在jenkins服务器上生成随机码 [root@jenkins ~]# openssl rand -hex 12 9525c873b906b013078337c1 #-hex 输出的结果为16进制数据,12表示指定生成的为随机的12个字符
-在jenkins上配置触发器
-在git项目的配置界面设置链接和token
登录创建项目的用户,因为我上面创建项目的用户是root,所以我直接登录root
如果不允许钩子和服务访问本地网络的话,在添加web钩子的时候会报错,下面添加web钩子
URL:http://192.168.100.203:8080/buildByToken/build?job=aaa&token=9525c873b906b013078337c1,这个URL后面的job需要和自己的项目名称相同,可以先到jenkins点击到项目中后查看当前的URL即可
-对web钩子进行测试
-更新gitlab中的项目代码
******在jenkins上操作 [root@jenkins ~]# ll 总用量 477292 -rwxr-xr-x 1 root root 84 6月 30 16:53 aaa.sh -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 181367942 6月 30 22:11 jdk-8u91-linux-x64.tar.gz -rw-r--r-- 1 root root 66044542 6月 30 22:16 jenkins-2.222.4-1.1.noarch.rpm -rw-r--r-- 1 root root 241319636 6月 30 23:49 plugins.tar.gz drwxr-xr-x 3 root root 32 6月 30 18:57 test [root@jenkins ~]# rm -rf test/ #删除原来的仓库 [root@jenkins ~]# ll 总用量 477292 -rwxr-xr-x 1 root root 84 6月 30 16:53 aaa.sh -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 181367942 6月 30 22:11 jdk-8u91-linux-x64.tar.gz -rw-r--r-- 1 root root 66044542 6月 30 22:16 jenkins-2.222.4-1.1.noarch.rpm -rw-r--r-- 1 root root 241319636 6月 30 23:49 plugins.tar.gz [root@jenkins ~]# git clone git@192.168.100.202:root/test.git #重新克隆一下 正克隆到 'test'... remote: Enumerating objects: 8, done. remote: Counting objects: 100% (8/8), done. remote: Compressing objects: 100% (3/3), done. remote: Total 8 (delta 0), reused 0 (delta 0) 接收对象中: 100% (8/8), done. [root@jenkins ~]# ls aaa.sh anaconda-ks.cfg jdk-8u91-linux-x64.tar.gz jenkins-2.222.4-1.1.noarch.rpm plugins.tar.gz test [root@jenkins ~]# cd test/ [root@jenkins test]# ll 总用量 4 -rw-r--r-- 1 root root 14 7月 1 16:22 index.html [root@jenkins test]# cat index.html bbbbbbbbbbbbbb [root@jenkins test]# echo "aaaaaaaaaaaaaaaaaa" > index.html #修改一下网页文件 [root@jenkins test]# cat index.html aaaaaaaaaaaaaaaaaa [root@jenkins test]# git add . #添加到暂存区 [root@jenkins test]# git commit -m "add index" #添加到本地仓库 *** 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)') [root@jenkins test]# git config --global user.name "root" #指定用户名 [root@jenkins test]# git config --global user.email "1248873545@qq.com" #指定邮箱 [root@jenkins test]# git commit -m "add index" #添加到本地仓库 [master 6974052] add index 1 file changed, 1 insertion(+), 1 deletion(-) [root@jenkins test]# git push origin master #推送到远程仓库的master分支 Counting objects: 5, done. Writing objects: 100% (3/3), 237 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@192.168.100.202:root/test.git c1d114b..6974052 master -> master
-访问web主机
这里只修改仓库的文件是因为上面的实验已经写过脚本了
成功!!!!
(2)实现Build Pipeline插件显示流程图
Bulid Pipeline插件作用:这个插件能够以流程图的形式展示各个工作的顺序,依赖关系等
-给aaa项目创建一个视图
完成!!!
(3)使用分支进行网站回滚
******在jenkins上操作 [root@jenkins ~]# git clone git@192.168.100.202:root/test.git 正克隆到 'test'... remote: Enumerating objects: 11, done. remote: Counting objects: 100% (11/11), done. remote: Compressing objects: 100% (4/4), done. remote: Total 11 (delta 0), reused 0 (delta 0) 接收对象中: 100% (11/11), done. [root@jenkins ~]# ll 总用量 477292 -rwxr-xr-x 1 root root 84 6月 30 16:53 aaa.sh -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 181367942 6月 30 22:11 jdk-8u91-linux-x64.tar.gz -rw-r--r-- 1 root root 66044542 6月 30 22:16 jenkins-2.222.4-1.1.noarch.rpm -rw-r--r-- 1 root root 241319636 6月 30 23:49 plugins.tar.gz drwxr-xr-x 3 root root 36 7月 1 17:05 test [root@jenkins ~]# cd test/ [root@jenkins test]# git branch #查看所有分支 * master [root@jenkins test]# git branch bb #创建分支 [root@jenkins test]# git checkout bb #切换分支 切换到分支 'bb' [root@jenkins test]# git branch * bb master [root@jenkins test]# git merge master Already up-to-date. [root@jenkins test]# cat index.html aaaaaaaaaaaaaaaaaa [root@jenkins test]# echo "bbbbbbbbb" > index.html #修改文件内容 [root@jenkins test]# cat index.html bbbbbbbbb [root@jenkins test]# git add . #推送到暂存区 [root@jenkins test]# git commit -m "add new" #推送到本地仓库 [bb e4c8495] add new 1 file changed, 1 insertion(+), 1 deletion(-) [root@jenkins test]# git push -u origin bb #推送到远程仓库 Counting objects: 5, done. Writing objects: 100% (3/3), 235 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: remote: To create a merge request for bb, visit: remote: http://192.168.100.202/root/test/merge_requests/new?merge_request%5Bsource_branch%5D=bb remote: To git@192.168.100.202:root/test.git 6974052..e4c8495 bb -> bb 分支 bb 设置为跟踪来自 origin 的远程分支 bb。
这个时候在gtilab的web界面中可以看到增加了新的分支
******修改脚本 [root@jenkins ~]# vim aaa.sh #!/bin/bash cd /root git clone -b bb git@192.168.100.202:root/test.git scp /root/test/index.html root@192.168.100.204:/var/www/html/index.html [root@jenkins ~]# chmod +x aaa.sh
测试,是否更换页面
(4)使用jenkins发布tomcat项目
此项目需要在Jenkins上安装JDK和Maven
Jenkins本身就是java开发,所以必须安装jdk,因为此项目基于maven架构,所以必须安装maven
Maven:就是将开发写的java代码,打包成war包,然后再将打包的war包部署到tomcat上,供客户端来访问
Project Object Model: 项目对象模型。通过xml格式保存的pom.xml文件。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。该文件是由开发维护,我们运维人员可以不用去关心。
-安装Maven
#下载Maven:wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz ******(1)这里已经下载了,所以直接上传进行安装 [root@jenkins ~]# ll 总用量 485928 -rwxr-xr-x 1 root root 144 7月 1 17:14 aaa.sh -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 8842660 7月 2 09:29 apache-maven-3.5.4-bin.tar.gz -rw-r--r-- 1 root root 181367942 6月 30 22:11 jdk-8u91-linux-x64.tar.gz -rw-r--r-- 1 root root 66044542 6月 30 22:16 jenkins-2.222.4-1.1.noarch.rpm -rw-r--r-- 1 root root 241319636 6月 30 23:49 plugins.tar.gz drwxr-xr-x 3 root root 36 7月 1 17:05 test [root@jenkins ~]# tar xf apache-maven-3.5.4-bin.tar.gz [root@jenkins ~]# mv apache-maven-3.5.4 maven [root@jenkins ~]# ln -s maven/bin/mvn /usr/bin/mvn #优化命令执行路径 [root@jenkins ~]# vim /etc/profile #在末尾添加 。。。。。。 export MAVEN_HOME=/root/maven export PATH=$PATH:$MAVEN_HOME/bin #保存退出 [root@jenkins ~]# source /etc/profile
-创建Maven私服nexus
因为maven要下载jar包,而maven默认回去官网下载,官网下载太慢了,所以可以搭建nexus加快jar包的下载速度
配置仓库的两个选项:1.项目下的pom.xml配置,只会生效当前的项目
2.在maven配置全局,所有项目生效
******(1)上传nexus包进行安装 [root@jenkins ~]# ll 总用量 605956 -rwxr-xr-x 1 root root 144 7月 1 17:14 aaa.sh -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 8842660 7月 2 09:29 apache-maven-3.5.4-bin.tar.gz -rw-r--r-- 1 root root 181367942 6月 30 22:11 jdk-8u91-linux-x64.tar.gz -rw-r--r-- 1 root root 66044542 6月 30 22:16 jenkins-2.222.4-1.1.noarch.rpm drwxr-xr-x 6 root root 99 7月 2 09:29 maven -rw-r--r-- 1 root root 122904706 7月 2 09:34 nexus-3.13.0-01-unix.tar.gz -rw-r--r-- 1 root root 241319636 6月 30 23:49 plugins.tar.gz drwxr-xr-x 3 root root 36 7月 1 17:05 test [root@jenkins ~]# tar xf nexus-3.13.0-01-unix.tar.gz [root@jenkins ~]# mv nexus-3.13.0-01 /usr/local/nexus [root@jenkins ~]# /usr/local/nexus/bin/nexus start #开启nexus WARNING: ************************************************************ WARNING: Detected execution as "root" user. This is NOT recommended! WARNING: ************************************************************ Starting nexus #nexus默认监听的端口是8081,因为是java开发,所有启动比较慢 [root@jenkins ~]# netstat -anptu | grep 8081 tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 1460/java
访问nexus
默认账号:admin,默认密码:admin123
修改为阿里云的URL:http://maven.aliyun.com/nexus/content/groups/public
配置私服
******修改配置文件 [root@jenkins ~]# cd maven/conf/ [root@jenkins conf]# vim settings.xml 。。。。。。 #在配置文件中间插入 <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://192.168.100.203:8081/repository/maven-central/</url> </mirror> 。。。。。。#这里同样从配置文件中间插入 <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> 。。。。。。#这里从197行的profiles开始修改 197 <profiles> <id>nexus</id> <repositories> <repository> <id>central</id> <url>http://192.168.100.203:8081/repository/maven-central/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://192.168.100.203:8081/repository/maven-central/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profiles> <activeProfiles> <activeProfile>nexus</activeProfile> </activeProfiles> 。。。。。。 #保存退出
-到jenkins的web界面上安装git和maven的插件
如果在可选插件中什么也看不到,可以在管理jenkins的界面点击下载新版本,下载最新的war包,升级jenkins,或者在网页中点击退回之前的版本
安装过程中必须有网,安装不成功可以手动到官网下,或者直接在linux的jenkins的目录中上传插件的目录和插件的jpi文件