当前位置 : 主页 > 操作系统 > centos >

61-CICD持续集成工具-Jenkins自动化部署JAVA程序

来源:互联网 收集:自由互联 发布时间:2023-08-21
Blue Ocean 插件实现可视化 注意: 安装完插件,需要重启Jenkins才能生效 参数化构建 执行命令脚本 [root@jenkins script] #cat wheel-deploy-rollback.sh #!/bin/bash # #*************************************************

Blue Ocean 插件实现可视化

注意: 安装完插件,需要重启Jenkins才能生效

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_ubuntu

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_tomcat_02



参数化构建

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_gitlab_03

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_ubuntu_04

执行命令脚本

[root@jenkins script]#cat wheel-deploy-rollback.sh 
#!/bin/bash
#
#********************************************************************
#Description: The test script
#Copyright (C): 2023 All rights reserved
#********************************************************************
HOST_LIST="
10.0.0.203
10.0.0.204
"
APP=wheel
APP_PATH=/var/www/html
DATA_PATH=/opt
DATE=`date +%F_%H-%M-%S`


deploy () {
for i in ${HOST_LIST};do
ssh $i "rm -rf ${APP_PATH} && mkdir -pv ${DATA_PATH}/${APP}-${DATE}"
scp -r * $i:${DATA_PATH}/${APP}-${DATE}
ssh $i "ln -sv ${DATA_PATH}/${APP}-${DATE} ${APP_PATH}"
done
}

rollback() {
for i in ${HOST_LIST};do
CURRENT_VERISION=$(ssh $i "readlink $APP_PATH")
CURRENT_VERISION=$(basename ${CURRENT_VERISION})
echo ${CURRENT_VERISION}
PRE_VERSION=$(ssh $i "ls -1 ${DATA_PATH} | grep -B1 ${CURRENT_VERISION}|head -n1 ")
echo $PRE_VERSION
ssh $i "rm -f ${APP_PATH}&& ln -sv ${DATA_PATH}/${PRE_VERSION} ${APP_PATH}"
done
}


case $1 in
deploy)
deploy
;;
rollback)
rollback
;;
*)
exit
;;
esac

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_gitlab_05



Jenkins利用git-parameter插件实现JAVA项目指定Tag版本部署

  • 更新镜像源到国内网站
[root@jenkins ~]#sed -i.bak 's#updates.jenkins.io/download#mirror.tuna.tsinghua.edu.cn/jenkins#g' /var/lib/jenkins/updates/default.json
[root@jenkins ~]#sed -i 's#www.google.com#www.baidu.com#g' /var/lib/jenkins/updates/default.json
  • 安装git-parameter插件

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_tomcat_06

  • Gitlab准备JAVA项目

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_tomcat_07

  • 给项目不同版本版本追加Tag

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_jenkins_08


[root@gitlab hello-world-war]#vim src/main/webapp/index.jsp 
[root@gitlab hello-world-war]#git commit -am 'v1.0'
[main 9bc3d36] v1.0
Committer: root <root@gitlab.mooreyxia.org>
您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确
与否。您可以对其进行设置以免再出现本提示信息。运行如下命令在编辑器
中编辑您的配置文件:

git config --global --edit

设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份:

git commit --amend --reset-author

1 file changed, 2 insertions(+), 2 deletions(-)
[root@gitlab hello-world-war]#git tag v1.0
[root@gitlab hello-world-war]#vim src/main/webapp/index.jsp
[root@gitlab hello-world-war]#git commit -am 'v2.0'
[main 5bbf552] v2.0
Committer: root <root@gitlab.mooreyxia.org>
您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确
与否。您可以对其进行设置以免再出现本提示信息。运行如下命令在编辑器
中编辑您的配置文件:

git config --global --edit

设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份:

git commit --amend --reset-author

1 file changed, 1 insertion(+), 1 deletion(-)
[root@gitlab hello-world-war]#git tag v2.0
[root@gitlab hello-world-war]#vim src/main/webapp/index.jsp
[root@gitlab hello-world-war]#git commit -am 'v3.0'
[main 3a17108] v3.0
Committer: root <root@gitlab.mooreyxia.org>
您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确
与否。您可以对其进行设置以免再出现本提示信息。运行如下命令在编辑器
中编辑您的配置文件:

git config --global --edit

设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份:

git commit --amend --reset-author

1 file changed, 1 insertion(+), 1 deletion(-)
[root@gitlab hello-world-war]#git tag v3.0
[root@gitlab hello-world-war]#git push --tags
枚举对象中: 23, 完成.
对象计数中: 100% (23/23), 完成.
使用 8 个线程进行压缩
压缩对象中: 100% (12/12), 完成.
写入对象中: 100% (18/18), 1.25 KiB | 319.00 KiB/s, 完成.
总共 18(差异 6),复用 0(差异 0),包复用 0
To gitlab.mooreyxia.org:dev/hello-world-war.git
* [new tag] v1.0 -> v1.0
* [new tag] v2.0 -> v2.0
* [new tag] v3.0 -> v3.0
[root@gitlab hello-world-war]#git log
commit 3a17108df5499e33b164c6a5d3c03c1cd905a055 (HEAD -> main, tag: v3.0)
Author: root <root@gitlab.mooreyxia.org>
Date: Sat Feb 11 18:12:22 2023 +0800

v3.0

commit 5bbf552dbc61b4e8744b133eba65b4cc657a760c (tag: v2.0)
Author: root <root@gitlab.mooreyxia.org>
Date: Sat Feb 11 18:11:57 2023 +0800

v2.0

commit 9bc3d3698b643caaddbe88ab180269b978ad4580 (tag: v1.0)
Author: root <root@gitlab.mooreyxia.org>
Date: Sat Feb 11 18:11:24 2023 +0800

v1.0

commit 157ee76ce127d16ae7e5b4d811b08f3df9871a37 (origin/master, origin/main, origin/HEAD)
Merge: 71766c4 fd12765
Author: Eric Savage <code@efsavage.com>
Date: Fri May 23 02:00:17 2014 -0400

Merge branch 'master' of github.com:efsavage/hello-world-war

commit 71766c4c16f1d23a09fdc92cc58358f3db8ad9d5
Author: Eric Savage <code@efsavage.com>
Date: Fri May 23 01:57:25 2014 -0400

Initial commit

commit fd127650656b7fbe6dddca5d2b3b831f4de8b3bc
Author: Eric Savage <efsavage@efsavage.com>
Date: Thu May 22 22:33:46 2014 -0700

Initial commit

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_gitlab_09

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_gitlab_10

  • 准备TomCat展示JAVA用
[root@ubuntu2204 ~]#apt install tomcat9  tomcat9-admin tomcat9-common tomcat9-docs tomcat9-examples tomcat9-user
[root@ubuntu2204 ~]#ss -ntlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 100 *:8080 *:* users:(("java",pid=2992,fd=37))

[root@ubuntu2204 ~]#ls /var/lib/tomcat9/webapps/
ROOT

测试一下

[root@gitlab wheel]#mkdir javaAPP
[root@gitlab wheel]#cd javaAPP/
[root@gitlab javaAPP]#git clone git@gitlab.mooreyxia.org:dev/hello-world-war.git
正克隆到 'hello-world-war'...
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 18 (delta 1), reused 18 (delta 1), pack-reused 0
接收对象中: 100% (18/18), 完成.
处理 delta 中: 100% (1/1), 完成.
[root@gitlab javaAPP]#ls
hello-world-war
[root@gitlab javaAPP]#tree hello-world-war/
hello-world-war/
├── dist
│ └── hello-world.war
├── pom.xml
├── README.md
└── src
└── main
└── webapp
├── index.jsp
└── WEB-INF
└── web.xml

5 directories, 5 files
[root@gitlab javaAPP]#scp -r hello-world-war/src/main/webapp/ 10.0.0.203:/var/lib/tomcat9/webapps/hello
The authenticity of host '10.0.0.203 (10.0.0.203)' can't be established.
ED25519 key fingerprint is SHA256:D5IJqoQ+6HEwmjaWfYs8tPfgGdJbWsyMJ/fk/L83np4.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:1: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.0.203' (ED25519) to the list of known hosts.
root@10.0.0.203's password:
web.xml 100% 345 284.5KB/s 00:00
index.jsp 100% 204 162.7KB/s 00:00
#203
[root@ubuntu2204 ~]#ls /var/lib/tomcat9/webapps/
hello ROOT
[root@ubuntu2204 ~]#tree /var/lib/tomcat9/webapps/hello/
/var/lib/tomcat9/webapps/hello/
├── index.jsp
└── WEB-INF
└── web.xml

1 directory, 2 files

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_tomcat_11

  • 利用git-parameter插件实现JAVA项目指定Tag版本部署

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_CICD_12

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_gitlab_13

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_tomcat_14

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_tomcat_15

准备部署脚本

#执行脚本的前提需要打通机器之间的ssh认证
[root@jenkins script]#cat hello_world_war.sh
#!/bin/bash
#
#********************************************************************
#Description: The test script
#Copyright (C): 2023 All rights reserved
#********************************************************************

APP_TAR_PATH=/data/tomcat/appdir
APP_PATH=/data/tomcat/webdir
APP_DEPLOY_PATH=/var/lib/tomcat9/webapps/hello

DATE=`date +%F_%H-%M-%S`
HOST_LIST="
10.0.0.203
10.0.0.204
"
tar -C $WORKSPACE/src/main/webapp/ -cf hello.tar .
for host in $HOST_LIST;do
scp hello.tar $host:${APP_TAR_PATH}/hello-${DATE}.tar
#在反向代理上先下线要部署的服务器
ssh $host "systemctl stop tomcat9 && \
mkdir ${APP_PATH}/hello-${DATE} && \
tar xf ${APP_TAR_PATH}/hello-${DATE}.tar -C ${APP_PATH}/hello-${DATE} && \
rm -f $APP_DEPLOY_PATH && \
ln -s ${APP_PATH}/hello-${DATE} $APP_DEPLOY_PATH && \
systemctl start tomcat9"
#在反向代理上上线服务器
done

#203 和 204
[root@ubuntu2204 ~]#mkdir -p /data/tomcat/appdir

#测试
[root@jenkins ~]#mkdir /test
[root@jenkins ~]#cd /test/
[root@jenkins test]#git clone git@gitlab.mooreyxia.org:dev/hello-world-war.git
Cloning into 'hello-world-war'...
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 18 (delta 1), reused 18 (delta 1), pack-reused 0
Receiving objects: 100% (18/18), done.
Resolving deltas: 100% (1/1), done.
[root@jenkins test]#ls
hello-world-war
[root@jenkins test]#cd hello-world-war/
[root@jenkins hello-world-war]#export WORKSPACE=/test/hello-world-war/
[root@jenkins hello-world-war]#bash /data/script/hello_world_war.sh
hello.tar 100% 10KB 5.3MB/s 00:00
hello.tar
#204 和 204
[root@ubuntu2204 webapps]#tree /data/tomcat/
/data/tomcat/
├── appdir
│ ├── hello-2023-02-11_17-51-15.tar
│ ├── hello-2023-02-11_17-54-59.tar
│ ├── hello-2023-02-11_17-56-05.tar
│ ├── hello-2023-02-11_17-57-40.tar
│ └── hello-2023-02-11_17-59-34.tar
└── webdir
├── hello-2023-02-11_17-57-40
│ ├── index.jsp
│ └── WEB-INF
│ └── web.xml
└── hello-2023-02-11_17-59-34
├── index.jsp
└── WEB-INF
└── web.xml

6 directories, 9 files

[root@ubuntu2204 webapps]#tree /var/lib/tomcat9/
/var/lib/tomcat9/
├── conf -> /etc/tomcat9
├── lib
├── logs -> ../../log/tomcat9
├── policy
│ └── catalina.policy
├── webapps
│ ├── hello -> /data/tomcat/webdir/hello-2023-02-11_17-59-34
│ └── ROOT
│ ├── index.html
│ └── META-INF
│ └── context.xml
└── work -> ../../cache/tomcat9

9 directories, 3 files

#记得测试清理变量
[root@jenkins hello-world-war]#unset WORKSPACE

测试构建部署是否正确

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_ubuntu_16

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_ubuntu_17

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_CICD_18



Jenkins利用git-parameter插件实现JAVA项目根据修订版本部署

与上述TAG部署有一点区别

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_jenkins_19

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_jenkins_20



Jenkins通过maven和container插件连接tomcat部署基于java的war包

  • 编译安装 tomcat 服务器和配置
#主备文件
[root@ubuntu2204 ~]#ls
apache-tomcat-9.0.71.tar.gz install_tomcat.sh jdk-8u351-linux-x64.tar.gz

#编译安装
TOMCAT_VERSION=9.0.71
JDK_VERSION=8u351

TOMCAT_FILE="apache-tomcat-${TOMCAT_VERSION}.tar.gz"

JDK_FILE="jdk-${JDK_VERSION}-linux-x64.tar.gz"

JDK_DIR="/usr/local"
TOMCAT_DIR="/usr/local"
DIR=`pwd`

color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo -n "$2" && $MOVE_TO_COL
echo -n "["
if [ $1 = "success" -o $1 = "0" ] ;then
${SETCOLOR_SUCCESS}
echo -n $" OK "
elif [ $1 = "failure" -o $1 = "1" ] ;then
${SETCOLOR_FAILURE}
echo -n $"FAILED"
else
${SETCOLOR_WARNING}
echo -n $"WARNING"
fi
${SETCOLOR_NORMAL}
echo -n "]"
echo
}



install_jdk(){
if [ ! -f "$DIR/$JDK_FILE" ];then
color 1 "$JDK_FILE 文件不存在"
exit;
elif [ -d $JDK_DIR/jdk ];then
color 1 "JDK 已经安装"
exit
else
[ -d "$JDK_DIR" ] || mkdir -pv $JDK_DIR
fi
tar xvf $DIR/$JDK_FILE -C $JDK_DIR
cd $JDK_DIR && ln -s jdk* jdk

cat > /etc/profile.d/jdk.sh <<EOF
export JAVA_HOME=$JDK_DIR/jdk
export PATH=\$PATH:\$JAVA_HOME/bin
#export JRE_HOME=\$JAVA_HOME/jre
#export CLASSPATH=.:\$JAVA_HOME/lib/:\$JRE_HOME/lib/
EOF
. /etc/profile.d/jdk.sh
java -version && color 0 "JDK 安装完成" || { color 1 "JDK 安装失败" ; exit; }

}

install_tomcat(){
if ! [ -f "$DIR/$TOMCAT_FILE" ];then
color 1 "$TOMCAT_FILE 文件不存在"
exit;
elif [ -d $TOMCAT_DIR/tomcat ];then
color 1 "TOMCAT 已经安装"
exit
else
[ -d "$TOMCAT_DIR" ] || mkdir -pv $TOMCAT_DIR
fi
tar xf $DIR/$TOMCAT_FILE -C $TOMCAT_DIR
cd $TOMCAT_DIR && ln -s apache-tomcat-*/ tomcat
echo "PATH=$TOMCAT_DIR/tomcat/bin:"'$PATH' > /etc/profile.d/tomcat.sh
id tomcat &> /dev/null || useradd -r -s /sbin/nologin tomcat

cat > $TOMCAT_DIR/tomcat/conf/tomcat.conf <<EOF
JAVA_HOME=$JDK_DIR/jdk
EOF

chown -R tomcat.tomcat $TOMCAT_DIR/tomcat/

cat > /lib/systemd/system/tomcat.service <<EOF
[Unit]
Descriptinotallow=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target

[Service]
Type=forking
Envirnotallow=$TOMCAT_DIR/tomcat/conf/tomcat.conf
ExecStart=$TOMCAT_DIR/tomcat/bin/startup.sh
ExecStop=$TOMCAT_DIR/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now tomcat.service &> /dev/null
systemctl is-active tomcat.service &> /dev/null && color 0 "TOMCAT 安装完成" || { color 1 "TOMCAT 安装失败" ; exit; }

}

install_jdk

install_tomcat

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_tomcat_21

  • 创建用户和授权

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_ubuntu_22


[root@web1 ~]#find / -name tomcat-users.xml
/etc/tomcat9/tomcat-users.xml
/usr/share/tomcat9/etc/tomcat-users.xml
/usr/share/tomcat9/skel/conf/tomcat-users.xml

[root@web1 ~]#vim /usr/share/tomcat9/etc/tomcat-users.xml
[root@web1 ~]#cat /usr/share/tomcat9/etc/tomcat-users.xml
...
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="123" roles="manager-gui,manager-script"/>
</tomcat-users>

[root@web1 ~]#systemctl restart tomcat9
  • 配置远程连接权限
[root@web1 ~]#dpkg -L tomcat9-admin | grep context.xml
/usr/share/tomcat9-admin/host-manager/META-INF/context.xml
/usr/share/tomcat9-admin/manager/META-INF/context.xml
[root@web1 ~]#vim /usr/share/tomcat9-admin/manager/META-INF/context.xml
[root@web1 ~]#cat /usr/share/tomcat9-admin/manager/META-INF/context.xml
...
<Context antiResourceLocking="false" privileged="true" >
<CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
sameSiteCookies="strict" />
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192\.168\.11\.\d+" /> --> 授权连接网段
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

[root@web1 ~]#systemctl restart tomcat9

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_gitlab_23

  • Jenkins 安装 Maven 和 Tomcat 插件

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_CICD_24

  • Jenkins 服务器上安装 maven 和配置镜像加速
[root@jenkins ~]#apt install maven -y
#镜像加速
[root@jenkins ~]#cat /etc/maven/settings.xml|grep mirror
...
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>

[root@jenkins ~]#mvn --version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.17, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-60-generic", arch: "amd64", family: "unix"
  • Jenkins 全局工具配置 JDK 和 Maven

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_CICD_25

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_tomcat_26

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_CICD_27

  • 创建 Tomcat 的全局凭据

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_ubuntu_28

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_ubuntu_29

  • 创建 Maven 风格的任务

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_tomcat_30

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_jenkins_31

  • 输入maven的编译选项
clean package -Dmaven.test.skip=true

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_tomcat_32

  • 更改编译后的war包名

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_tomcat_33

  • 部署构建后war包到tomcat服务器上

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_CICD_34

  • 构建

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_CICD_35

[root@jenkins ~]#cd /var/lib/jenkins/workspace/maven-hello-world-war/
[root@jenkins maven-hello-world-war]#ll
total 36
drwxr-xr-x 6 root root 4096 Feb 17 09:23 ./
drwxr-xr-x 3 root root 4096 Feb 17 09:22 ../
drwxr-xr-x 8 root root 4096 Feb 17 09:22 .git/
-rw-r--r-- 1 root root 42 Feb 17 09:22 .gitignore
-rw-r--r-- 1 root root 213 Feb 17 09:22 README.md
drwxr-xr-x 2 root root 4096 Feb 17 09:22 dist/
-rw-r--r-- 1 root root 930 Feb 17 09:22 pom.xml
drwxr-xr-x 3 root root 4096 Feb 17 09:22 src/
drwxr-xr-x 4 root root 4096 Feb 17 09:23 target/
[root@jenkins maven-hello-world-war]#tree target/
target/
├── hello-world-war-1.0.0
│ ├── META-INF
│ ├── WEB-INF
│ │ ├── classes
│ │ └── web.xml
│ └── index.jsp
├── hello-world-war-1.0.0.war
├── hello.war
└── maven-archiver
└── pom.properties

5 directories, 5 files

#确认hello.war复制到tomcat服务器上
[root@web01 ~]#ls /usr/local/tomcat/webapps/
ROOT docs examples hello hello-world-war-1.0.0 hello-world-war-1.0.0.war hello.war host-manager manager
  • 确认tomcat上部署程序是否成功

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_gitlab_36

  • 尝试升级
#代码更改并提交到gitlab
[root@gitlab data]#vim hello-world-war/src/main/webapp/index.jsp
[root@gitlab data]#cd hello-world-war/
[root@gitlab hello-world-war]#git branch
* main
[root@gitlab hello-world-war]#git commit -am 'v1.0'
[main 8e12062] v1.0
Committer: root <root@gitlab.mooreyxia.org>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly. Run the
following command and follow the instructions in your editor to edit
your configuration file:

git config --global --edit

After doing this, you may fix the identity used for this commit with:

git commit --amend --reset-author

1 file changed, 2 insertions(+), 2 deletions(-)
[root@gitlab hello-world-war]#git push
Enumerating objects: 11, done.
Counting objects: 100% (11/11), done.
Delta compression using up to 2 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 445 bytes | 445.00 KiB/s, done.
Total 6 (delta 2), reused 0 (delta 0), pack-reused 0
To gitlab.mooreyxia.org:myprj/hello-world-war.git
157ee76..8e12062 main -> main
[root@gitlab hello-world-war]#git log
commit 8e12062eafed08a26c8949be9417e00072ad7e1a (HEAD -> main, origin/main, origin/HEAD)
Author: root <root@gitlab.mooreyxia.org>
Date: Fri Feb 17 09:56:18 2023 +0000

v1.0

commit 157ee76ce127d16ae7e5b4d811b08f3df9871a37 (origin/master)
Merge: 71766c4 fd12765
Author: Eric Savage <code@efsavage.com>
Date: Fri May 23 02:00:17 2014 -0400

Merge branch 'master' of github.com:efsavage/hello-world-war

commit 71766c4c16f1d23a09fdc92cc58358f3db8ad9d5
Author: Eric Savage <code@efsavage.com>
Date: Fri May 23 01:57:25 2014 -0400

Initial commit

部署构建后确认tomcat服务更新

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_ubuntu_37



jenkins实现spring-boot项目的构建和部署

  • Gitlab 导入项目

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_jenkins_38

  • Jenkins 服务器上安装 maven 和配置镜像加速
[root@jenkins ~]#apt install maven -y
#镜像加速
[root@jenkins ~]#vim /etc/maven/settings.xml
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
#查看相关变量值
[root@jenkins ~]#mvn --version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.17, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-60-generic", arch: "amd64", family: "unix"
  • Jenkins 全局工具配置 JDK 和 Maven

参考上一个实验,这里省略

  • 准备相关脚本 - 如遇到java命令未执行,需要解决SSH远程执行命令找不到环境变量的问题
[root@jenkins script]#cat spring-boot-helloworld.sh 
#!/bin/bash

APP_PATH=/data/spring-boot-helloworld/

HOST_LIST="
192.168.11.204
192.168.11.205
"

mvn clean package -Dmaven.test.skip=true

for host in $HOST_LIST;do
ssh $host killall -9 java &> /dev/null
scp target/spring-boot-helloworld-*-SNAPSHOT.jar $host:${APP_PATH}/spring-boot-helloworld.jar
ssh $host "nohup java -jar ${APP_PATH}/spring-boot-helloworld.jar --server.port=8888 &>/dev/null & "&
done


#部署对象服务器要提前建立项目存放路径
[root@web03 ~]#mkdir -p /data/spring-boot-helloworld/
[root@web04 ~]#mkdir -p /data/spring-boot-helloworld/
  • jenkins服务器与部署对象服务器打通ssh验证
[root@jenkins script]#ssh-copy-id 192.168.11.204
[root@jenkins script]#ssh-copy-id 192.168.11.205
  • 部署对象服务器安装java
#编译安装
[root@web03 ~]#ls
install_jdk.sh jdk-8u351-linux-x64.tar.gz

[root@web03 ~]#cat install_jdk.sh
#!/bin/bash

JDK_FILE="jdk-8u351-linux-x64.tar.gz"

JDK_DIR="/usr/local"

DIR=`pwd`

color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo -n "$2" && $MOVE_TO_COL
echo -n "["
if [ $1 = "success" -o $1 = "0" ] ;then
${SETCOLOR_SUCCESS}
echo -n $" OK "
elif [ $1 = "failure" -o $1 = "1" ] ;then
${SETCOLOR_FAILURE}
echo -n $"FAILED"
else
${SETCOLOR_WARNING}
echo -n $"WARNING"
fi
${SETCOLOR_NORMAL}
echo -n "]"
echo
}

install_jdk(){
if [ ! -f "$DIR/$JDK_FILE" ];then
color 1 "$JDK_FILE 文件不存在"
exit;
elif [ -d $JDK_DIR/jdk ];then
color 1 "JDK 已经安装"
exit
else
[ -d "$JDK_DIR" ] || mkdir -pv $JDK_DIR
fi
tar xvf $DIR/$JDK_FILE -C $JDK_DIR
cd $JDK_DIR && ln -s jdk* jdk

cat > /etc/profile.d/jdk.sh <<EOF
export JAVA_HOME=$JDK_DIR/jdk
export PATH=\$PATH:\$JAVA_HOME/bin
#export JRE_HOME=\$JAVA_HOME/jre
#export CLASSPATH=.:\$JAVA_HOME/lib/:\$JRE_HOME/lib/
EOF
. /etc/profile.d/jdk.sh
java -version && color 0 "JDK 安装完成" || { color 1 "JDK 安装失败" ; exit; }

}

install_jdk

#bash 安装即可
[root@web03 ~]#java -version
java version "1.8.0_351"
Java(TM) SE Runtime Environment (build 1.8.0_351-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.351-b10, mixed mode)

[root@web04 ~]#java -version
java version "1.8.0_351"
Java(TM) SE Runtime Environment (build 1.8.0_351-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.351-b10, mixed mode)
  • 在 Jenkins 创建 Jenkins任务

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_tomcat_39

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_ubuntu_40

  • 构建并检查结果

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_CICD_41

61-CICD持续集成工具-Jenkins自动化部署JAVA程序_ubuntu_42

我是moore,拖更了一阵子,现在继续。大家一起加油!!!

上一篇:混沌工程-物理机Chaosd使用
下一篇:没有了
网友评论