Jenkins总结

目录

1.什么是jenkins

2. 什么是持续集成(CI)

3.安装Jenkins       

4.配置Jenkins

4.1 JDK配置

4.1.1 下载Linux版JDK

4.1.2 上传至Linux并解压

4.1.3  配置/etc/profile文件

4.1.4  使配置文件生效,并检查版本号

4.1.5  jenkins中配置JDK路径

4.2 Git配置

         4.2.1 安装Git环境

         4.2.2 jenkins安装Git插件

         4.2.3 jenkins安装Git插件

4.2.4 测试

4.2.5 需要凭证配置

4.3 Maven集成

4.3.1 下载安装

4.3.2 配置环境

4.3.3 使配置生效并查看安装情况

4.3.4 jenkins配置Maven

4.3.5  安装Maven插件

4.3.6  在/data/software目录下新建一个repository文件夹,用来作为maven的仓库

4.3.7 修改配置文件

4.3.8 测试

5. 配置最终jenkins(免密,自动部署)

5.1 配置ssh免密登录

5.2  编写jenkins发布脚本

5.3 编写应用启动脚本

5.4 编写应用停止脚本

6. jenkins自动拉取gitee的代码


1.什么是jenkins

        Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。

2. 什么是持续集成(CI)

       因为开发部门同时维护多个版本,多个版本的发布,测试需要大量人力,所以要有一个专业的持续集成工具来管理持续重复的工作。 

 

3.安装Jenkins

        (1) 准备条件          

                1.安装JDK。
                下载jdk,上传至linux并解压

                2.配置/etc/profile的内容


                ############JDK
                export JAVA_HOME=/usr/local/jdk1.8.0_161
                export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
                export PATH=$JAVA_HOME/bin:$PATH


                3.刷新配置文件,使配置生效
                source /etc/profile


                4.检测java环境信息
                javac

        (2)安装

1. 下载jenkins
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war 
2. 启动jenkins
# 使用nohup命令启动 nohup 当虚拟机黑屏时 也会运行   日志--->输出到jenkins.log   & 后台运行
nohup java -jar /usr/local/soft/jenkins.war  --httpPort=8777 --httpsPort=8778 > /usr/local/soft/jenkins.log 2>&1 &

3. 使用tail命令查看启动日志,日志中会输出jenkins密码

​
  4. 通过浏览器访问jenkins

  http://ip地址:8777 

​

 

 

 可以使用admin登录,也可以重新创建用户登录

 

4.配置Jenkins

        4.1 JDK配置

                4.1.1 下载Linux版JDK

链接: https://pan.baidu.com/s/1Xd-zDEQDMc6Q0kwZ6o3PAA 
提取码: bq6s

                4.1.2 上传至Linux并解压

$ tar -zxvf jdk8u181.tar.gz(压缩包名称)

                4.1.3  配置/etc/profile文件

$ vi /etc/profile

# 在最底部加入以下内容后保存并退出(路径记得修改为自己的安装路径)
# JDK
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

                4.1.4  使配置文件生效,并检查版本号

$ source /etc/profile

$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

    4.1.5  jenkins中配置JDK路径

                jenkins-》全局工具配置-》JDK-》新增JDK

         4.2 Git配置

        为了jenkins能够拉取代码,需要安装Git环境和jenkins对应的Git插件

              4.2.1 安装Git环境

# 安装
$ yum install git -y
# 查看版本
$ git --version

         4.2.2 jenkins安装Git插件

         4.2.3 jenkins安装Git插件

                此处无需在jenkins中配置Git环境,采用默认生成的即可

         4.2.4 测试

                1.Gitee上任意建一个仓库

 

 2. jenkins-》新建任务-》自由风格项目

 

 

 

 

 

 进入jenkins的工作空间查看文件是否拉取下来,所有拉取的文件都会存放在jenkins工作空间中

 到此用户名密码方式的凭证已经打通Git。

        4.2.5 需要凭证配置

      凭据就是用来存储需要密文保护的数据库密码、Gitee密码信息、Docker私有仓库密码等,以便 Jenkins可以和这些第三方的应用进行交互。

      1.凭证插件安装

 该插件默认在一开始就会被安装,安装后在jenkins-》系统管理-》安全栏目会出现Manage Credentials选项,若没有需要安装插件并重启。

 

 测试:

 

 

 

 

         4.3 Maven集成

    在jenkins上发布Java项目时需要使用Maven来进行构建打包(Gradle项目则需要安装配置Gradle)   

        4.3.1 下载安装

# 找一个目录存放maven
cd /data/software/

# 从阿里云上下载maven安装包
wget https://mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

# 解压
tar -zxvf apache-maven-3.6.3-bin.tar.gz

# 当前maven的安装目录为:/usr/local/java/apache-maven-3.6.3

         4.3.2 配置环境

vi /etc/profile

在最后面JDK配置上作出一些更改
export MAVEN_HOME=/usr/local/java/apache-maven-3.6.3
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

      4.3.3 使配置生效并查看安装情况

source /etc/profile
mvn -version

        4.3.4 jenkins配置Maven

      4.3.5  安装Maven插件

 4.3.6  在/data/software目录下新建一个repository文件夹,用来作为maven的仓库

$ cd /data/software
$ mkdir repository

 4.3.7 修改配置文件

使用root账户修改Maven的settings.xml文件(指定仓库目录和阿里云镜像)

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  
  <!--本地仓库-->          
  <localRepository>/data/software/repository</localRepository>
  
  <mirrors>
    <!--阿里云镜像-->
    <mirror>
      <id>aliyun-maven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven mirror</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
  </mirrors>
    ...
    ...
</settings>

4.3.8 测试

 1.新建Maven项目

 2.在码云上建一个git项目

 3.使用Git上传到码云

 4.  jenkins添加Maven项目任务

 5.编写Maven编译命令

 

构建并查看控制台日志

保存后,点击立即构建,然后进入日志控制台查看日志

从日志可以看到代码已经在拉取了,而且走的事阿里云仓库,第一次拉取过程会比较长。

通过查看/data/software/repository可以看到有存放拉取的jar包,通过这2个证据可以证明settings.xml文件配置成功且有效 

构建成功后查看jenkinsworkspace目录下的jar包

 到此Maven集成完毕

 

5. 配置最终jenkins(免密,自动部署)

 

 

思考,这里我们需要执行的shell内容是什么?

是不是把当前编译好的jar包拷贝到应用服务器去启动

  • 应用服务器规划

由于jenkins构建消耗内存极大,一般jenkins是一台单独的工具机器,Java项目一般在其他的机器上,这里我重新安装一台虚拟机,有条件的可以直接开通阿里云的ECS ()

应用服务器信息

  • IP:192.168.223.129

  • JDK:1.8(安装过程省略)

  • user:root

  • 部署路径:/data/app/my-boot

  • 端口:9010

5.1 配置ssh免密登录

     免密登录主要是方便jenkins服务器192.168.223.128的root用户—》应用服务器192.168.223.129的root用户上的jar包拷贝,部署本就是jar包拷贝的过程

    在192.168.223.128机器上使用root用户生成秘钥注意此处是root用户

$ ssh-keygen -t rsa
# 3次回车

运行后会在当前用户的根目录生成一个.ssh文件夹

ssh文件夹中的文件描述

  • id_rsa : 生成的私钥文件

  • id_rsa.pub : 生成的公钥文件

接下来需要将公钥导入到认证文件中

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

如果希望ssh公钥生效需满足至少下面两个条件:

  • .ssh目录的权限必须是700

  • .ssh/authorized_keys文件权限必须是600

给对应文件授权

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

authorized_keys文件拷贝到另一台应用服务器的root用户.ssh目录下

# 在应用服务器(192.168.223.129)上用root用户创建/root/.ssh文件夹  mkdir -p /root/.ssh

# 在jenkins服务器(192.168.223.128)上将pub公钥文件拷贝到应用服务器的.ssh目录下

scp -p ~/.ssh/id_rsa.pub root@192.168.223.129:/root/.ssh/authorized_keys

在jenkins192.168.223.128服务器上进行免密连接测试

# 在jenkins服务器的/root/目录下创建filetest文件,并拷贝到应用服务器
$ cd ~/
$ touch filetest
$ scp -p filetest root@192.168.223.129:/root/filetest
# 进入到应用服务器(192.168.223.129),检查/root目录下是否出现filetest

# 在jenkins服务器上使用ssh进行免密连接测试,成功后会出现Last Login的提示
$ ssh root@192.168.223.129
Last login: Sun Sep 20 21:53:03 2020
$ exit

到此免密登录和拷贝实现成功,为接下来jar包部署提供了快捷的帮助

5.2  编写jenkins发布脚本

 注意:记得修改脚本内的ip

#!/bin/bash

echo "部署的目录和项目名称"
DIR="/data/app"
projectName="my-boot"

echo "待部署的应用服务器,可多台"
server_ips="192.168.223.139"
for server_ip in ${server_ips[@]}
do

echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
mkdir -p $DIR/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
  mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar 
fi
EOF

echo "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar

echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar

EOF

done

echo "success"

5.3 编写应用启动脚本

/data/app/my-boot目录下创建启动脚本start.sh

$ touch start.sh
$ vi start.sh
# 将下面代码粘贴到start.sh中
#!/bin/bash
set -e #任何命令出错就退出
set -o pipefail

APP_ID=my-boot
APP_DIR="/data/app"

nohup java -jar ${APP_DIR}/${APP_ID}/${APP_ID}.jar > release_out.log &
start_ok=false
if [[ $? = 0 ]];then
        sleep 3
        tail -n 10 release_out.log
        sleep 5
        tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];then
    echo "Application started ok"
    exit 0
else
    echo "Application started error"
    exit 1
fi

5.4 编写应用停止脚本

/data/app/my-boot目录下创建停止脚本stop.sh

$ touch stop.sh
$ vi stop.sh
# 将下面代码粘贴到stop.sh中
#!/bin/bash

APP_ID=my-boot
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh
  • 并进行启动和停止测试,查看日志输出是否正常

  • 将下述启动代码配置jenkins中 (放到脚本EOF前面)

    sh $DIR/${projectName}/stop.sh
    sh $DIR/${projectName}/start.sh

    访问并测试代码是否生效

  • 如果是虚拟机则需要给防火墙添加9010端口或者关闭防火墙

    $ su root
    # 开启防火墙9010端口
    $ firewall-cmd --zone=public --add-port=9010/tcp --permanent
    # 使配置生效
    $ firewall-cmd --reload

    修改代码返回值,提交至Gitee,并再次进行构建发布,访问http://192.168.223.129:9010查看结果是否更新

6. jenkins自动拉取gitee的代码

        (1)不能是内网。-----内网穿透软件【花生壳】

 

 

 

 

 

 保存后即可自动拉取。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值