CI/CD之Jenkins+Gitlab(四)

简介: CI/CD之Jenkins+Gitlab(四)

-进入配置阶段


73e1a4f36f9943abba4efe5e813629b2.png8dc1b748172b44f3be836ca3911c96b8.png


23210909bf7a4c768475ecb10ba24c96.png


5e02c26cce654057847669c5cbb001b0.png


f2720db3a6e8481faa19deae2a880944.png


-新建jenkins任务


34f68c961a664a19a581b782ffed2d72.png

b062b6949a1049fc83f56ee588123763.png

d2393534e0054764863ee58877958565.png

beb83bb715df4375a4ef20788c851c9f.png

155778503b3343e9adf5e68e51b993d2.png


0c5efc6a2842489d8d1e0d52f7c286b9.png

ef1a7ddc2fb64b28b07f205e7fcab6e9.png


57ab651b1e0048d884096a3b19dff8d8.png

5bb6f4777158464a9df7790e91fb4fe8.png


#脚本
[root@jenkins ~]# vim bbb.sh
#!/bin/bash
source /etc/profile
scp /var/lib/jenkins/workspace/tast/test1/target/test1.war root@192.168.100.204:/usr/local/tomcat/webapps/
ssh root@192.168.100.204 "/usr/local/tomcat/bin/shutdown.sh"
sleep 3
ssh root@192.168.100.204 "/usr/local/tomcat/bin/startup.sh"
[root@jenkins ~]# cd /var/lib/jenkins/workspace
[root@jenkins workspace]# rm -rf *  #删除原来的
[root@jenkins workspace]# ll
总用量 0
[root@jenkins workspace]# git clone git@192.168.100.202:root/test.git  #重新克隆
正克隆到 'test'...
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 14 (delta 0), reused 0 (delta 0)
接收对象中: 100% (14/14), done.
[root@jenkins workspace]# ll
总用量 0
drwxr-xr-x 3 root root 36 7月   2 18:19 test
[root@jenkins workspace]# cd test/
[root@jenkins test]# ll
总用量 4
-rw-r--r-- 1 root root 19 7月   2 18:19 index.html
[root@jenkins test]# rm -rf *
[root@jenkins test]# ll  #传输项目到脚本指定的路径下
总用量 4
drwxr-xr-x 5 root root  97 7月   2 17:56 test1
-rw-r--r-- 1 root root 491 7月   2 17:56 time.java
[root@jenkins test]# git add test1    #添加暂存区
[root@jenkins test]# git add time.java    
[root@jenkins test]# git commit -m "tomcat "  #添加到本地仓库
[master 502f979] tomcat
 20 files changed, 262 insertions(+)
 create mode 100644 test1/.classpath
 create mode 100644 test1/.project
 create mode 100644 test1/.settings/.jsdtscope
 create mode 100644 test1/.settings/org.eclipse.jdt.core.prefs
 create mode 100644 test1/.settings/org.eclipse.m2e.core.prefs
 create mode 100644 test1/.settings/org.eclipse.wst.common.component
 create mode 100644 test1/.settings/org.eclipse.wst.common.project.facet.core.xml
 create mode 100644 test1/.settings/org.eclipse.wst.jsdt.ui.superType.container
 create mode 100644 test1/.settings/org.eclipse.wst.jsdt.ui.superType.name
 create mode 100644 test1/.settings/org.eclipse.wst.validation.prefs
 create mode 100644 test1/pom.xml
 create mode 100644 test1/src/main/resources/com/Time.java
 create mode 100644 test1/src/main/webapp/WEB-INF/web.xml
 create mode 100644 test1/src/main/webapp/index.jsp
 create mode 100644 test1/target/classes/com/Time.class
 create mode 100644 test1/target/classes/com/Time.java
 create mode 100644 test1/target/m2e-wtp/web-resources/META-INF/MANIFEST.MF
 create mode 100644 test1/target/m2e-wtp/web-resources/META-INF/maven/www.linuxfan.cn.new/test1/pom.properties
 create mode 100644 test1/target/m2e-wtp/web-resources/META-INF/maven/www.linuxfan.cn.new/test1/pom.xml
 create mode 100644 time.java
[root@jenkins test]# echo $?
0
[root@jenkins test]# git push -u origin master   #推送到远程仓库
Counting objects: 38, done.
Compressing objects: 100% (26/26), done.
Writing objects: 100% (37/37), 5.25 KiB | 0 bytes/s, done.
Total 37 (delta 1), reused 0 (delta 0)
To git@192.168.100.202:root/test.git
   6974052..502f979  master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

-在web主机上安装tomcat

******(1)先删除httpd
[root@apache ~]# yum -y remove httpd
。。。。。。
完毕!
******(2)安装tomcat
[root@apache ~]# ll     #上传jdk和tomcat的源码包
总用量 186324
-rw-------. 1 root root      1264 1月  12 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root   9417469 7月   3 02:08 apache-tomcat-8.5.16.tar.gz
-rw-r--r--  1 root root 181367942 7月   3 02:02 jdk-8u91-linux-x64.tar.gz
[root@apache ~]# tar xf jdk-8u91-linux-x64.tar.gz 
[root@apache ~]# mv jdk1.8.0_91/ /usr/local/java
[root@apache ~]# cat <<a>> /etc/profile
> export PATH=$PATH:/usr/local/java/bin:/usr/local/java
> a
[root@apache ~]# source /etc/profile
[root@apache ~]# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
[root@apache ~]# tar xf apache-tomcat-8.5.16.tar.gz 
[root@apache ~]# mv apache-tomcat-8.5.16 /usr/local/tomcat
[root@apache ~]# /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@apache ~]# netstat -anpt | grep java
tcp6       0      0 :::8080                 :::*                    LISTEN      1458/java           
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1458/java           
tcp6       0      0 :::8009                 :::*                    LISTEN      1458/java   

image.png


-在jenkins中进行构建

6d009a94d85f44c9a7e7657fe41ceaaa.png

138cf158a31e47a08f2f553662166f16.png

-报错的解决方案

#为web主机添加权限
[root@apache ~]# chmod a+x /usr/local/tomcat/bin/shutdown.sh 
[root@apache ~]# chmod a+x /usr/local/tomcat/bin/startup.sh 
[root@apache ~]# chmod -R o=rx /usr/local/tomcat/bin/
[root@apache ~]# chmod -R o=rwx  /usr/local/tomcat/logs/
[root@apache ~]# vim /usr/local/tomcat/bin/catalina.sh   #直接在注释下添加
#!/bin/bash     
JAVA_HOME="/usr/local/java"
JRE_HOME="/usr/local/java/jre"
。。。。。。
#保存退出

(5)Jenkins回滚


Jenkins回滚有两种方式,分别是通过gitlab仓库的commit_id来回滚和使用jenkins的版本序列号来回滚


-通过commit_id来回滚

  • Gitlab可以通过提交的id号的前12位,就可以回到之前的状态
******(1)使用的是上面的apache项目,所以现在web主机上安装一下httpd
[root@apache ~]# yum -y install httpd
。。。。。。
完毕!
[root@apache ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@apache ~]# systemctl start httpd

(2)在做之前先安装一下gogs插件

f21957651c5d4d0aa5aa5126b6a7945c.png

845024f9fab046df80bce4b93b3c5574.png

924afe50a588400084ea7fc6d60a5922.png

6f594b1afd474a60a4032cc260810c89.png

dd0b5b6ef9464c6a93577d13ef224c50.png

注意:安装失败可以去手动下载,然后上传


(3)配置jenkins中apache的项目


af2129730a3844fa888ee8e9db8d925f.png

3eceae70708049e09e42dcbd15b2e0c8.png

687e75303d05478e80f51b4485f73a72.png

9cb36378fc41407ebcf256b06cf6305c.png

8fae3b8d613b4d9aa94440deb5b46b79.png

39a512bd693b4db7ad37f3f4ee97b5b4.png


case $status  in
  rollback)
    echo "-----本次操作为回滚,版本号为$version-----"
    git reset --hard $version
echo "-----回滚完成,打包中-----"  
    ;;
  *)
  exit
esac
#发现上面的status和version,都作为变量被引入了,使用case语句,把rollback作为条件,达到目的效果

249b887eb70d43268e93e693d5ad2b76.png

[root@jenkins ~]# vim aaa.sh    #编写脚本
#!/bin/bash
cd /root
scp /var/lib/jenkins/workspace/aaa/index.html root@192.168.100.204:/var/www/html/index.html
#/var/lib/jenkins/workspace/这个目录为jenkins拉取gitlab库下来的库,后面的aaa就是项目目录,仓库文件会拉到相应的项目目录中
[root@jenkins ~]# rm -rf test/   #删除原来拉下来的gitlab库,重新拉取
[root@jenkins ~]# ll
总用量 605960
-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
-rwxr-xr-x  1 root root       274 7月   2 19:05 bbb.sh
-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        20 7月   2 09:34 sonatype-work
[root@jenkins ~]# git clone git@192.168.100.202:root/test.git  #重新拉取仓库
正克隆到 'test'...
remote: Enumerating objects: 57, done.
remote: Counting objects: 100% (57/57), done.
remote: Compressing objects: 100% (35/35), done.
remote: Total 57 (delta 1), reused 0 (delta 0)
接收对象中: 100% (57/57), 6.79 KiB | 0 bytes/s, done.
处理 delta 中: 100% (1/1), done.
[root@jenkins ~]# cd test/
[root@jenkins test]# git rm -rf *  #使用git rm -rf删除之前仓库中的所有文件
rm 'index.html'
rm 'test1/.classpath'
rm 'test1/.project'
rm 'test1/.settings/.jsdtscope'
rm 'test1/.settings/org.eclipse.jdt.core.prefs'
rm 'test1/.settings/org.eclipse.m2e.core.prefs'
rm 'test1/.settings/org.eclipse.wst.common.component'
rm 'test1/.settings/org.eclipse.wst.common.project.facet.core.xml'
rm 'test1/.settings/org.eclipse.wst.jsdt.ui.superType.container'
rm 'test1/.settings/org.eclipse.wst.jsdt.ui.superType.name'
rm 'test1/.settings/org.eclipse.wst.validation.prefs'
rm 'test1/pom.xml'
rm 'test1/src/main/resources/com/Time.java'
rm 'test1/src/main/webapp/WEB-INF/web.xml'
rm 'test1/src/main/webapp/index.jsp'
rm 'test1/target/classes/com/Time.class'
rm 'test1/target/classes/com/Time.java'
rm 'test1/target/m2e-wtp/web-resources/META-INF/MANIFEST.MF'
rm 'test1/target/m2e-wtp/web-resources/META-INF/maven/www.linuxfan.cn.new/test1/pom.properties'
rm 'test1/target/m2e-wtp/web-resources/META-INF/maven/www.linuxfan.cn.new/test1/pom.xml'
rm 'time.java'
[root@jenkins test]# echo "aaaa1" > index.html   #重新写一份文件
[root@jenkins test]# git add index.html   #添加到暂存区
[root@jenkins test]# git commit -m "aaa1"  #添加到本地仓库
[master eec82c4] aaa1
 21 files changed, 1 insertion(+), 263 deletions(-)
 delete mode 100644 test1/.classpath
 delete mode 100644 test1/.project
 delete mode 100644 test1/.settings/.jsdtscope
 delete mode 100644 test1/.settings/org.eclipse.jdt.core.prefs
 delete mode 100644 test1/.settings/org.eclipse.m2e.core.prefs
 delete mode 100644 test1/.settings/org.eclipse.wst.common.component
 delete mode 100644 test1/.settings/org.eclipse.wst.common.project.facet.core.xml
 delete mode 100644 test1/.settings/org.eclipse.wst.jsdt.ui.superType.container
 delete mode 100644 test1/.settings/org.eclipse.wst.jsdt.ui.superType.name
 delete mode 100644 test1/.settings/org.eclipse.wst.validation.prefs
 delete mode 100644 test1/pom.xml
 delete mode 100644 test1/src/main/resources/com/Time.java
 delete mode 100644 test1/src/main/webapp/WEB-INF/web.xml
 delete mode 100644 test1/src/main/webapp/index.jsp
 delete mode 100644 test1/target/classes/com/Time.class
 delete mode 100644 test1/target/classes/com/Time.java
 delete mode 100644 test1/target/m2e-wtp/web-resources/META-INF/MANIFEST.MF
 delete mode 100644 test1/target/m2e-wtp/web-resources/META-INF/maven/www.linuxfan.cn.new/test1/pom.properties
 delete mode 100644 test1/target/m2e-wtp/web-resources/META-INF/maven/www.linuxfan.cn.new/test1/pom.xml
 delete mode 100644 time.java
[root@jenkins test]# git push origin master  #推送到远程仓库
Counting objects: 5, done.
Compressing objects: 100% (1/1), done.
Writing objects: 100% (3/3), 234 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.100.202:root/test.git
   6783721..eec82c4  master -> master

在配置完成后,在构建项目时,会带参数

619b645184d0430da1733d9f4fe92627.png

可以选择选项进行构建,点击构建

2c145452c25948b3b8b429c28d8fb5da.png

访问web主机,成功修改页面


24f387de65c64896b5163a526c9356e2.png

******修改gitlab远程仓库的文件内容
[root@jenkins ~]# cd test/
[root@jenkins test]# ll
总用量 4
-rw-r--r-- 1 root root 6 7月   4 14:46 index.html
[root@jenkins test]# echo "bbbbb1" > index.html   #修改为bbbbb1
[root@jenkins test]# git add index.html 
[root@jenkins test]# git commit -m "bbbb1" 
[master b20929a] bbbb1
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@jenkins test]# git push origin master
Counting objects: 5, done.
Writing objects: 100% (3/3), 233 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.100.202:root/test.git
   eec82c4..b20929a  master -> master

再次进行构建38a8d5827b1b4bd2a662bfb8faa72ebf.png

测试页面成功推送

8e4ed4e2f9f64aad8fa232c995569f51.png

查看仓库的commit_id号


e02633dbf35a4b78b91f6cab4fe4b733.png

右边的都是id号,可以直接复制


27f7eb626ac54c3baa1208525ad11b9c.png

复制上一个仓库版本的id号

055b3d716a864f5d9e97267e45edb362.png

57c30d48ada444d998d5a737e1fc6d77.png

674629d2c85a4a729858cbc9e168445a.png

-通过项目的发布的版本号来回滚


通过发布时备份项目,会有一个版本号,通过版本号来进行回滚

ac7ba03752bb42ca860f7bfe47e60081.png

修改一些jenkins项目的配置,在上面的使用commit_id回滚实验的基础上修改

7bb109e4ed8e4992ae15ccb6cfc91f0a.png

85a0317f4e514bb5a271b2bf00c96dc9.png


case $status  in
  deploy)
    echo "-----发布前进行打包备份-----"
echo "status:$status"
BACK_DIR=/var/lib/jenkins/workspace
    path="${BACK_DIR}/bak"   
    if [ -d $path ];
    then
        echo "The files is already  exists "
    else
        mkdir -p  $path
    fi
cd ${BACK_DIR}/${JOB_NAME}
#${JOB_NAME}=项目名称(test)
#${BUILD_NUMBER}=第几次构建
    tar czf ${JOB_NAME}-${BUILD_NUMBER}.tar.gz *
    mv ${JOB_NAME}-${BUILD_NUMBER}.tar.gz ${BACK_DIR}/bak
scp ${WORKSPACE}/*  root@192.168.100.214:/var/www/html/index.html
    echo "Completin!"
;;
rollback)
BACK_DIR=/var/lib/jenkins/workspace
cd ${BACK_DIR}/bak
tar xf ${JOB_NAME}-${version}.tar.gz
    scp ${BACK_DIR}/bak/index.html root@192.168.100.214:/var/www/html/index.html
    rm -rf ${JOB_NAME}
;;
  *)
  exit
      ;;
esac

8feb98f0d70b4ed4aa5659096d400c3c.png


修改仓库的文件内容

[root@jenkins ~]# cd test/
[root@jenkins test]# ll
总用量 4
-rw-r--r-- 1 root root 7 7月   4 14:56 index.html
[root@jenkins test]# cat index.html 
bbbbb1
[root@jenkins test]# echo "cccccc" > index.html 
[root@jenkins test]# git add index.html 
[root@jenkins test]# git commit -m "add ccc"
[master e89845c] add ccc
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@jenkins test]# git push origin master
Counting objects: 5, done.
Writing objects: 100% (3/3), 233 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 2 (delta 0)
To git@192.168.100.202:root/test.git
   b20929a..e89845c  master -> master

先进行构建


8479275535dc4e7983f890bc6f86ff4e.png

1af7f4da4cba4c179e2cae612870eb6f.png

8e293f3d7d104a14bbcad3f004879664.png

******(1)可以看到项目已经被打包备份了
[root@jenkins test]# cd /var/lib/jenkins/workspace/
[root@jenkins workspace]# 
[root@jenkins workspace]# ll
总用量 0
drwxr-xr-x 3 root root 36 7月   5 14:20 aaa
drwxr-xr-x 2 root root  6 7月   5 14:20 aaa@tmp
drwxr-xr-x 2 root root 27 7月   5 14:20 bak
drwxr-xr-x 3 root root 36 7月   4 14:42 test
[root@jenkins workspace]# cd bak/
[root@jenkins bak]# ll
总用量 4
-rw-r--r-- 1 root root 128 7月   5 14:20 aaa-22.tar.gz   #这个就是备份的文件
******(2)再次修改仓库文件内容
[root@jenkins bak]# cd
[root@jenkins ~]# cd test/
[root@jenkins test]# echo "dddddd" > index.html 
[root@jenkins test]# git add index.html 
[root@jenkins test]# git commit -m "add ddd"
[master 5b934c3] add ddd
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@jenkins test]# git push origin master
Counting objects: 5, done.
Writing objects: 100% (3/3), 233 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.100.202:root/test.git
   e89845c..5b934c3  master -> master

再次进行构建


f262e2c7ab69426e8a227c9118662cce.png

1e420abd8b914c91a4ee045640d9ed15.png

1019d3e557c44e00ac1ec194f4baf4ef.png

这次进行回滚,回滚上一个,上一个的项目序列号是22

f0f844694ac9499da7b1db3aedd6dcdc.png


9f44164d86ef4d2892c39cc0e330b01c.png

621e8d2132e645769794a5a207da8ba4.png

目录
相关文章
|
13天前
无缝构建与部署:GitLab CI/CD首秀的实战攻略
无缝构建与部署:GitLab CI/CD首秀的实战攻略
25 0
无缝构建与部署:GitLab CI/CD首秀的实战攻略
|
1月前
|
JavaScript jenkins 持续交付
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
60 0
|
1月前
|
Devops 开发工具 数据安全/隐私保护
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
55 0
|
3月前
|
Shell 开发工具 git
GitLab CI/CD
GitLab CI/CD
54 0
|
3月前
|
小程序 前端开发 开发工具
Node+GitLab实现小程序CI系统
Node+GitLab实现小程序CI系统
|
3月前
|
存储 jenkins 持续交付
百度搜索:蓝易云【Docker+Rancher+Harbor+GitLab+Jenkins搭建CI/CD环境】
请注意,上述步骤仅为一个示例,实际搭建过程可能因环境和需求的不同而有所变化。因此,在实际操作中,请参考相应工具的官方文档和指南,以确保正确地配置和集成这些工具。
59 3
|
4月前
|
jenkins Java 持续交付
【项目集成工具】Jenkins
【项目集成工具】Jenkins
|
1月前
|
jenkins Java 持续交付
Docker Swarm总结+Jenkins安装配置与集成(5/5)
Docker Swarm总结+Jenkins安装配置与集成(5/5)
52 0
|
1月前
|
jenkins Java 持续交付
Docker Swarm总结+Jenkins安装配置与集成snarqube和目标服务器(4/5)
Docker Swarm总结+Jenkins安装配置与集成snarqube和目标服务器(4/5)
44 0