jenkins/git/maven/nexus/npm实现自动化部署

环境准备:

1、 jenkins机(外网环境)
192.168.92.89:用于搭建Jenkins的一套
centos7
jdk1.8.0_261
tomcat-8.5.57
maven-3.6.3
git-2.9.5
jenkins-2.164.3
nexus-3.25(必须为可连接外网的服务器,本次实验一并将其安装至192.168.92.89)
2、目的机(内网环境)
192.168.101.162:测试环境部署api代码的服务器
192.168.101.163:测试环境部署oss代码的服务器
3、gitlab地址:
[email protected]:zhangleipeng/ebtrust-app-iwealth.git

一、jdk/maven/git/jenkins(tomcat)

[root@bz-cf-zhgl-yy ~]# ll /home/ebapp/jenkins
total 234512
drwxrwxr-x 6 ebapp ebapp        99 Dec 15 17:27 apache-maven-3.6.3
-rw-rw-r-- 1 ebapp ebapp   9506321 Dec 15 17:25 apache-maven-3.6.3-bin.tar.gz
drwxrwxr-x 9 ebapp ebapp       220 Dec 15 17:27 apache-tomcat-8.5.57
-rw-rw-r-- 1 ebapp ebapp  10379806 Dec 15 17:25 apache-tomcat-8.5.57.tar.gz
lrwxrwxrwx 1 ebapp ebapp        12 Dec 17 09:24 jdk -> jdk1.8.0_261
drwxr-xr-x 8 ebapp ebapp       273 Jun 18  2020 jdk1.8.0_261
-rw-rw-r-- 1 ebapp ebapp 143111803 Dec 15 17:29 jdk-8u261-linux-x64.tar.gz
-rw-rw-r-- 1 ebapp ebapp  77133106 Dec 17 20:12 jenkins-2.164.3-1.1.noarch.rpm
lrwxrwxrwx 1 ebapp ebapp        18 Dec 17 08:59 maven -> apache-maven-3.6.3
lrwxrwxrwx 1 ebapp ebapp        20 Dec 17 08:59 tomcat -> apache-tomcat-8.5.57
[root@bz-cf-zhgl-yy ~]#  yum install vim gcc gcc-c++ wget net-tools lrzsz iotop lsof iotop bash-completion curl policycoreutils openssh-server openssh-clients postfix -y

1、编译安装git

#1、卸载旧git,安装新git:
#把git压缩包拉至/usr/local/git下,并解压
# cd git-2.9.5
#移除之前安装的git
# yum remove git
# cd /usr/local
# mkdir git && cd git
# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
# make prefix=/usr/local/git all
# make prefix=/usr/local/git install
#设置环境变量
# vim  /etc/profile
export PATH=/usr/local/git/bin:$PATH
# source  /etc/profile
#查看git的版本,确实为安装的2.9.5
# git --version
git version 2.9.5

#2、配置姓名邮箱
[ebapp@jenkins]$ git config --global user.name "wanglu"
[ebapp@jenkins]$ git config --global user.email 2425942026@qq.com

#3、配置私钥公钥,实现免密拉取代码:
[ebapp@jenkins]$ ssh-keygen -t rsa -C "[email protected]"
##将此公钥粘贴至gitlab仓库中:User Settings-->SSH Keys-->add key
[ebapp@jenkins]$ cat /root/.ssh/id_rsa.pub
##将此私钥粘贴至Jenkins网页版:Jenkin---->系统管理---->凭据---->jenkins---->全局凭据---->添加凭据(ssh认证,用户私钥)
[ebapp@jenkins]$ cat /root/.ssh/id_rsa
#验证1:不再需要用户名密码
[root@bz-cf-zhgl-yy gitdev]# git clone [email protected]:zhangleipeng/ebtrust-app-iwealth.git
Cloning into 'ebtrust-app-iwealth'...
#验证2:Jenkins网页创建任务

2、jdk卸载及重装

#1、卸载旧jdk
[ebapp@jenkins]$ rpm -qa |grep java
[ebapp@jenkins]$ rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
[ebapp@jenkins]$ rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64

#2、安装新jdk
[ebapp@jenkins]$ ll /home/ebapp/jenkins/
lrwxrwxrwx  1 ebapp ebapp        12 Dec 17 09:24 jdk -> jdk1.8.0_261
drwxr-xr-x  8 ebapp ebapp       273 Jun 18 14:59 jdk1.8.0_261
-rw-rw-r--  1 ebapp ebapp 143111803 Dec 15 17:29 jdk-8u261-linux-x64.tar.gz
#配置环境变量
[ebapp@jenkins]$  vim /etc/profile
export JAVA_HOME=/home/ebapp/jenkins/jdk 
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
[ebapp@jenkins]$ source /etc/profile 
#验证版本是否为新版本
[ebapp@jenkins]$  ln -sv /home/ebapp/jenkins/jdk/bin/java /usr/bin/
[ebapp@jenkins]$ java -version

3、maven

[ebapp@jenkins]$ ll /home/ebapp/jenkins
total 230688
drwxrwxr-x  6 ebapp ebapp        99 Dec 15 17:27 apache-maven-3.6.3
-rw-rw-r--  1 ebapp ebapp   9506321 Dec 15 17:25 apache-maven-3.6.3-bin.tar.gz
lrwxrwxrwx  1 ebapp ebapp        18 Dec 17 08:59 maven -> apache-maven-3.6.3
[ebapp@jenkins]# ln -sv /home/ebapp/jenkins/maven/bin/mvn /usr/bin/
#配置环境变量:
[ebapp@jenkins]$  vim /etc/profile
export MAVEN_HOME=/home/ebapp/jenkins/maven
export PATH=$MAVEN_HOME/bin:$PATH
[ebapp@jenkins]$ source /etc/profile 

#验证
[ebapp@jenkins]$ mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /home/ebapp/jenkins/maven
Java version: 1.8.0_261, vendor: Oracle Corporation, runtime: /home/ebapp/jenkins/jdk1.8.0_261/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1127.el7.x86_64", arch: "amd64", family: "unix"

#配置setting文件--配置maven私服nexus:
# vim /home/ebapp/jenkins/maven/conf/settings.xml
  <servers>  
  		<server>
       			 <id>nexus-snapshots</id>
        		 <username>admin</username>
        		 <password>admin123</password>
  		</server>
  <servers>  
 
  </mirrors>
        <mirror>
                <id>maven-public</id>
                <mirrorOf>central</mirrorOf>
                <name>nexus aliyun</name>
                <url>http://192.168.92.89:8081/repository/maven-public</url>
        </mirror>
         <mirror>
                <id>aliyun</id>
                <mirrorOf>aliyun</mirrorOf>
                <name>aliyun</name>
                <url>http://192.168.92.89:8081/repository/aliyun</url>
        </mirror>
  </mirrors>

4、node/npm/vue

#安装node
# wget https://nodejs.org/dist/v14.15.4/node-v14.15.4-linux-x64.tar.xz    // 下载
# tar xf  node-v14.15.4-linux-x64.tar.xz       // 解压
# cd node-v14.15.4-linux-x64/                  // 进入解压目录
# ./bin/node -v                               // 执行node命令 查看版本
# ln -sv npm/node-v14.15.4-linux-x64/bin/npm /usr/local/bin/ 
# ln -sv npm/node-v14.15.4-linux-x64/bin/node /usr/local/bin/

#配置环境变量
# vim /etc/profile
export NODE_HOME=/home/ebapp/npm/node-v14.15.4-linux-x64
export PATH=$NODE_HOME/bin:$PATH
# source /etc/profile
# node -v
# npm -v

# chown -R root:root node-v14.15.4-linux-x64
# git clone [email protected]:gdxt_fe/gdxt-pc.git
#npm打包
方法1:
1. cd crm-pc
2. npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
3. npm i
安装不成功,卸载node-sass: npm uninstall node-sass
删除node_modules目录,尝试方案:2

方法2:
4. cd crm-pc
5. npm install -g cnpm --registry=https://registry.npm.taobao.org
6. cnpm install node-sass
7. cnpm i

# cnpm install
# cnpm run build #根据package.json区分测试生产环境,决定使用build或其它
npm ERR! missing script: build
# cnpm run build:stage #测试环境
# cnpm run build:prod #生产环境
# cnpm run build:dev #开发环境
#npm是国外的速度比较慢,cnpm是淘宝弄的一个镜像,网速比较快。用两者打包均可。

jenkins/git/maven/nexus/npm实现自动化部署_第1张图片

!!!二、nexus完成后再继续以下打包操作

4、服务器上进行测试:git拉取代码、maven进行打包编译

[ebapp@jenkins]$ mkdir gitlab && cd gitlab
[ebapp@jenkins]$ git clone http://192.168.138.12/gitlab/zhangleipeng/ebtrust-app-iwealth
[ebapp@jenkins]$ cd ebtrust-app-iwealth/
[ebapp@jenkins]$ ll
# vim /home/ebapp/gitlab/ebtrust-app-iwealth/iwealth-common/pom.xml
        <dependency>
            <groupId>com.csii.payment</groupId>
            <artifactId>client</artifactId>
            <version>1.0.0</version>
        </dependency>
# mvn clean install -P test
# mvn clean install -U -e

##脚本编写及将其布置在Jenkins网页上

5、jenkins安装、启动

(1)jenkins安装、启动
#Jenkins三种安装启动方式:
#方法一、war包直接启动:
[ebapp@jenkins]$ java -jar jenkins.war
#网址:http://192.168.92.89:8080

#方法二、war包tomcat下安装启动:
#将Jenkins.war放至tomcat/webapps目录下
[ebapp@jenkins]$ sh tomcat/bin/startup.sh
#网址:http://192.168.92.89:8080/jenkins/

#方法三:编译安装启动(推荐!!):
#3.1、centos安装启动:
 wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
 rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
 yum install jenkins -y
#3.2、直接安装rpm包(本次安装使用该方式!!)
 rpm -ivh jenkins-2.164.3-1.1.noarch.rpm
 #配置文件
 vim /etc/sysconfig/jenkins
 #使用Jenkins用户可能有很多权限没有,所以建议使用root用户
 JENKINS_USER="root"
 JENKINS_PORT="8888"
[root@bz-cf-zhgl-yy ~]# rpm -qa jenkins
jenkins-2.164.3-1.1.noarch
#启动Jenkins
[root@bz-cf-zhgl-yy ~]# systemctl start jenkins
[root@bz-cf-zhgl-yy ~]# systemctl status jenkins
#登录网址:http://192.168.92.89:8888
(2)Jenkins网页设置:

网址:http://192.168.92.89:8888
解锁Jenkins–默认选择的插件–创建Jenkins管理员(账号密码)—Jenkins URL(http://192.168.92.89:8888)–开始使用Jenkins–登录

1、插件安装及管理

#查看当前插件
[11:20:08 root@centos7-jenkins ~]#pwd
/root
[11:20:08 root@centos7-jenkins ~]#ll .jenkins/plugins/

安装插件:(GitLab,Gitlab Authentication,Gitlab Hook,Blue Ocean,NodeJS Plugin)
登录Jenkins–系统管理–插件管理–可选插件(搜索git)–直接安装–安装完成后重启Jenkins(空闲时)

2、配置jinkens权限管理
安装插件:Role-based Authorization Strategy
Jenkins—系统管理—管理用户-新建用户

3、更改认证方式:
Jenkins—系统管理—全局安全配置— 勾选Role-Based Strategy(角色认证)

4、创建角色:
Jenkins—系统管理–Manage and Assign Roles—Manage Roles—添加custom-role角色,read全部权限
Jenkins—系统管理–Manage and Assign Roles—Assign Roles—User/group to add wanglu,勾选custom-role角色–使用wanglu用户登录进行测试

5、系统配置–邮箱配置
Jenkins—系统管理–系统配置–Jenkins Location:系统管理员邮件地址([email protected]
Jenkins—系统管理–系统配置–邮件通知-测试发邮件–详见文档4.1.13

6、全局工具配置
路径必须正确,否则后续构建会报错。配置后点击保存。
jenkins/git/maven/nexus/npm实现自动化部署_第2张图片
jenkins/git/maven/nexus/npm实现自动化部署_第3张图片
jenkins/git/maven/nexus/npm实现自动化部署_第4张图片
jenkins/git/maven/nexus/npm实现自动化部署_第5张图片

7、配置 jenkins 自动拉取代码(见上“编译安装git”):
jenkins 服务器添加证书:
Jenkin---->系统管理---->凭据---->jenkins---->全局凭据---->添加凭据(ssh认证,用户私钥)

8、新建任务:
(1)自由风格项目:test-1
(2)流水线项目:test-2
(3)实战项目:
自由风格项目–源码:
Repository URL:[email protected]:test-service/test-project.git
Credentials:wanglu(gitlab)
Branches to build:根据实际场景选择对应的分支
构建-增加构建步骤-执行shell(把调用的shell都准备好):
jenkins/git/maven/nexus/npm实现自动化部署_第6张图片
jenkins/git/maven/nexus/npm实现自动化部署_第7张图片

测试构建项目:
立即构建---->#1---->控制台输出
服务器验证数据:

# ps -ef |grep java
tomcat    5001     1  1 17:07 ?        00:00:43 java -Xms4096m -Xmx4096m -jar iwealth-web-api-1.0.0-SNAPSHOT.jar --spring.profiles.active=test --server.port=8081
tomcat    5234  3746  0 17:59 pts/5    00:00:00 grep --color java
# tail -f application/logs/api_out.log 
# ll backup/
drwxrwxr-x 2 tomcat tomcat 4096 113 10:55 2021-01-13

二、Nexus

1、Nexus安装

[15:51:11 root@sptapp apps]#tar xvf nexus-3.25.0-03-unix.tar.gz 
[15:51:58 root@sptapp apps]#ll
total 156308
-rw-r--r-- 1 root  root  160022971 Jul 29 17:54 nexus-3.25.0-03-unix.tar.gz
drwxr-xr-x 9 root  root       4096 Dec  8 15:51 nexus-3.25.0-03
drwxr-xr-x 3 root  root       4096 Dec  8 15:51 sonatype-work
[15:52:10 root@sptapp apps]#cd nexus-3.25.0-03
[13:49:32 root@sptapp apps]#vim /etc/profile
export RUN_AS_USER=root
[13:51:47 root@sptapp apps]#source /etc/profile
#启动nexus
[13:53:08 root@sptapp apps]#nexus-3.25.0-03/bin/nexus start
#nexus服务启动成功后,需要稍等一段时间,8081端口才起来
[13:57:04 root@sptapp apps]#lsof -i:8081
#Nexus的工作目录是sonatype-work
[14:34:14 root@sptapp ~]#ls apps/sonatype-work/nexus3
backup blobs cache db elasticsearch etc generated-bundles health-check instances keystores lock log orient port tmp
#设置-repository-blobcd .. storiesccd对应路径:
[14:34:14 root@sptapp ~]#ls /apps/sonatype-work/nexus3/blobs

2、Nexus网页设置:

1、网址访问:http://192.168.92.89:8081/
(如果出现404,就访问http://localhost:8081/nexus)
2、登录:点击右上角“sign in”,输入默认用户名admin和默认密码admin123登录
(如果出现报错:Incorrect username or password, or no permission to use the application.将所提示的密码文件/apps/sonatype-work/nexus3/admin.password中的密码输入即可,之后根据提示修改密码即可)
3、可以点击上面的“设置”图标,在“设置”里可以添加用户、角色,对接LDAP等的设置
4、设置-repositories–create repository:
选择要创建的类型:maven2(proxy)
Name:就是为代理起个名字
Remote Storage: 代理的地址,Maven的地址为: https://repo1.maven.org/maven2/
Blob Store: 选择代理下载包的存放路径
5、放必要jar包

-------------------!!!!!!!!未完!!!!!!!-----

三、目的机

telnet 目标机的22端口不通,修改目标机为10022端口
[root@osstest ~]# vim /etc/ssh/sshd_config 
Port 22
Port 10022
#重启sshd服务
[root@osstest ~]# /etc/init.d/sshd  restart
[root@osstest ~]# systemctl restart sshd.service
#验证:
#telnet通即可

四、shell脚本

1、192.168.101.162脚本:

[root@apptest ~]#  su - tomcat

#备份脚本
[tomcat@apptest ~]$ vim application/backup.sh
#!/bin/bash
cd /home/tomcat/application/
backdir="backup/`date "+%Y-%m-%d"`"
jardir="/home/tomcat/application/iwealth-web-api-1.0.0-SNAPSHOT.jar"
mkdir $backdir
cp $jardir $backdir
echo "已将$jardir备份至目录$backdir"

#重启脚本:
[tomcat@apptest ~]$ vim application/restart.sh
#!/bin/bash
cd /home/tomcat/application/
pid=`ps axu | grep iwealth-web-api-1.0* | grep -v grep| awk '{print$2}'`
if [ "$pid" = "" ];then
    echo "java服务没有启动!"
else
    kill -9 $pid
    pid1=`ps axu | grep iwealth-web-api-1.0* | grep -v grep| awk '{print$2}'`
    if [ "$pid1" = "" ];then
            echo "成功杀死进程:" $pid
        else
                echo "进程杀死失败!"
                exit 1
            fi
fi
sleep 3;
nohup java  -Xms4096m -Xmx4096m -jar iwealth-web-api-1.0.0-SNAPSHOT.jar --spring.profiles.active=test --server.port=8081 >/home/tomcat/application/logs/api_out.log 2>&1 &
pid2=`ps axu | grep iwealth-web-api-1.0* | grep -v grep| awk '{print$2}'`
echo "成功启动进程:" $pid2

2、192.168.101.163脚本:

[root@osstest ~]#  su - tomcat

#备份脚本
[tomcat@osstest ~]$ vim application/backup.sh
#!/bin/bash
backdir="backup/`date "+%Y-%m-%d"`"
jardir="application/iwealth-web-oss-1.0.0-SNAPSHOT.jar"
mkdir $backdir
cp $jardir $backdir
echo "已将$jardir备份至目录$backdir"

#重启脚本:
[tomcat@osstest ~]$ vim application/restart.sh
#!/bin/bash
cd /home/tomcat/application
pid=`ps axu | grep iwealth-web-oss-1-1.0* | grep -v grep| awk '{print$2}'`
if [ "$pid" = "" ];then
    echo "java服务没有启动!"
else
    kill -9 $pid
    pid1=`ps axu | grep iwealth-web-oss-1-1.0* | grep -v grep| awk '{print$2}'`
    if [ "$pid1" = "" ];then
            echo "成功杀死进程:" $pid
        else
                echo "进程杀死失败!"
                exit 1
            fi
fi
sleep 1;
nohup java -jar /home/tomcat/application/iwealth-web-oss-1.0.0-SNAPSHOT.jar --spring.profiles.active=test >/home/tomcat/application/logs/oss_out.log 2>&1 &
pid2=`ps axu | grep iwealth-web-oss-1-1.0* | grep -v grep| awk '{print$2}'`
echo "成功启动进程:" $pid2

3、192.168.92.89脚本:

#部署脚本
[root@bz-cf-zhgl-yy ~]# cd /home/ebapp/apps
#实现远程ssh免密登录
[root@bz-cf-zhgl-yy apps]# yum install -y sshpass

[root@bz-cf-zhgl-yy apps]# vim deployapi.sh
#!/bin/bash
apifile="/var/lib/jenkins/workspace/APP-test-api自动化部署/iwealth-web-api/target/iwealth-web-api-1.0.0-SNAPSHOT.jar"
targetdir="/home/tomcat/application/"
echo -e " \033[31m================开始部署APP-test-api======================== \033[0m"
echo -e "\033[31m1)备份中...\033[0m"
sshpass -p 'tomcat' ssh -p 10022 [email protected] "source /etc/profile;sh /home/tomcat/application/backup.sh"
sleep 3
echo -e "\033[31m2)部署中...\033[0m"
sshpass -p 'tomcat' scp -P 10022 $apifile [email protected]:$targetdir
echo "已将$apifile放至$targetdir"
sleep 3
echo -e "\033[31m3)重启中...\033[0m"
sshpass -p 'tomcat' ssh -p 10022 [email protected] "source /etc/profile;sh /home/tomcat/application/restart.sh"
sleep 3
echo -e " \033[31m================部署完成APP-test-api======================== \033[0m"

[root@bz-cf-zhgl-yy apps]# vim deployoss.sh 
#!/bin/bash
ossfile="/var/lib/jenkins/workspace/APP-test-oss自动化部署/iwealth-web-api/target/iwealth-web-oss-1.0.0-SNAPSHOT.jar"
targetdir="/home/tomcat/application/"
echo -e " \033[31m================开始部署APP-test-oss======================== \033[0m"
echo -e "\033[31m1)备份中...\033[0m"
sshpass -p 'tomcat' ssh -p 10022 [email protected] "source /etc/profile;sh /home/tomcat/application/backup.sh"
echo "已将$ossfile放至$targetdir"
sleep 3
echo "-------备份完成-------"
echo -e "\033[31m2)部署中...\033[0m"
sshpass -p 'tomcat' scp -P 10022 $ossfile [email protected]:$targetdir
sleep 3
echo "-------部署完成-------"
echo -e "\033[31m3)重启中...\033[0m"
sshpass -p 'tomcat' ssh -p 10022 [email protected] "source /etc/profile;sh /home/tomcat/application/restart.sh"
sleep 3
echo "-------重启jar包完成-------"
echo -e " \033[31m================部署完成APP-test-oss======================== \033[0m"

报错汇总:

Jenkins maven报错:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.5.2:install (default-install) on project iwealth-web-api: Failed to install metadata com.ebtrust.iwealth:iwealth-web-api:1.0.0-SNAPSHOT/maven-metadata.xml: Could not parse metadata /root/.m2/repository/com/ebtrust/iwealth/iwealth-web-api/1.0.0-SNAPSHOT/maven-metadata-local.xml: in epilog non whitespace content is not allowed but got n (position: END_TAG seen …\nn… @21:2) -> [Help 1]
解决:删除文件/root/.m2/repository/com/ebtrust/iwealth/iwealth-web-api/1.0.0-SNAPSHOT/maven-metadata-local.xml后,重新编辑即可。
参考:https://www.cnblogs.com/fanbi/p/14480832.html
https://blog.csdn.net/jiadajing267/article/details/80830219

你可能感兴趣的:(自动化)