• Jekins的简介和使用


    1.Jenkins

    1.1什么是Jenkins

     Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成

    1.2 什么是持续集成

    在详细了解 Jenkins 如何提供 CI 之前,我相信了解什么是 CI 很重要。CI 是一种开发实践,其中开发人员一天几次将代码集成到共享存储库中。当有人将新代码推送到共享存储库中时,测试会在非开发人员(测试人员)的计算机上自动运行。

    CI 的工作流程可为你提供快速反馈。如果更改中断了构建,则在将代码提交到共享存储库后不久,你将知道。控制台还提供了详细的日志消息,因此可以识别出哪些更改导致了构建失败。另外,通过在 CI 服务器中使用公共存储库,你可以将构建部署通知到其他开发人员和测试人员。
     

    1.3与Jenkins的持续集成

    enkins 在 CI 中大量使用,以允许代码自动构建,部署和测试。让我们考虑以下情况:先构建应用程序的完整源代码,然后将其部署在测试服务器上进行测试。这是开发软件的理想方法,但是在实践中,这是不实际的。开发人员将不得不暂停工作,直到获得测试结果为止,这可能需要几个小时。整个过程是手动的,因此可能会出现人为错误,这可能会浪费时间。

    当然,在上述情况下,它会导致软件交付缓慢和客户不满意。这导致对开发人员可以在其中触发上述过程自动发生的需求。Jenkins 正是在这里发挥 CI 的作用。

    使用 Jenkins,你可以将其连接到 Mercurial,SVN,Git 等存储库。因此,所有开发人员要做的就是配置 Jenkins定期检查存储库,并在有新内容时尝试构建,测试和部署新代码。这有助于节省大量开发人员的时间,使他们可以专注于自己的工作。

    1.4为什么使用jenkins

     

    2.安装jenkins

    (1)把jenkins的war放入虚拟机中

    (2)启动该war包

    nohup java -jar /usr/local/jenkins.war  --httpPort=8777 --httpsPort=8778 > /usr/local/jenkins.log 2>&1 &

    -- nohup:如果虚拟机休眠时不关闭jenkins
    -- >: 启动时生成的日志放入
    -- &: 后台运行

    (3) 访问jenkins

     

    需要密码:

    (4)查看密码:

    cat jenkins.log 

     

    (5)通过浏览器访问jenkins
      

    (6)安装插件

     

     

    (7)创建用户

     

    成功登录后的页面

     

    3.忘记密码如何修改密码

    • 进入到jenkins的工作目录,找到config.xml,我这里是/root/.jenkins/config.xml

    • 修改该配置文件useSecurity的节点值为false

    true

    • 重启jenkins项目后,再次访问jenkins站点

    • 进入到系统管理

     

    • 找到全局安全配置

     

     

    进入到用户列表,找到admin用户

     

     

     

    3.jenkins集成jdk

    3.1 下载Linux版JDK jenkins

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

    3.2上传至Linux并解压

    $ tar -zxvf jdk8u181.tar.gz

    3.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

    3.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)

    3.5jenkins中配置JDK路径

    (1)

    (2)

    4.jenkins集成git

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

    4.1CentOS 7上安装Git环境

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

    4.2jenkins安装Git插件

    4.3jenkins配置Git环境

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

    4.4Gitee上任意建一个仓库

     

    4.5测试凭据是否能够使用

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

     

     

     

     

     

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

     

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

    5.jenkins集成maven

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

    5.1下载安装

    # 找一个目录存放maven
    cd /usr/local/

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

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

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

    5.2环境配置

    vi /etc/profile

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

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

    source /etc/profile
    mvn -version

    5.4修改maven的镜像    

    cd apache-maven-3.8.6
     
    vi conf/settings.xml

    修改本地仓库位置

     

     

    1. <localRepository>/data/software/repositorylocalRepository>
    2. <mirror>
    3. <id>aliyun-mavenid>
    4. <mirrorOf>centralmirrorOf>
    5. <name>aliyun maven mirrorname>
    6. <url>http://maven.aliyun.com/nexus/content/groups/public/url>
    7. mirror>

    5.5jenkins集成maven

    5.5.1

    5.5.2 安装Maven插件

     

    5.5.3测试:

    如果gitee上的maven项目内容发生改变,则会拉取并进行编译 打包了

    (1)创建一个gitee仓库

    (2)idea中创建一个maven工程

    (3)把idea项目上传到git远程仓库  

    (4)jenkins拉取项目

     

     

     

     

     

    从日志可以看到代码已经在拉取了,第一次拉取过程会比较长。

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

    6. jenkins自动拉取gitee远程仓库的代码

    6.1jenkins中安装gitee插件  

     

    修改任务项目:

     

    使用内网穿透器:

     

     

     

    6.2 需要把jenkins打包好的项目复制到测试服务器

    企业: jenkins所在的服务器和我们项目运行时的服务器应该不是同一台机器。

    jenkins编译打包好的软件在jenkins所在的服务器。

    155上的jar远程复制到156上。---->

    scp 文件名  root@远程ip:/远程的目录
    scp qy150-weixin-pay-0.0.1-SNAPSHOT.jar root@192.168.223.156:/usr/local

     

    在复制过程中需要手动输入密码:

    远程登录其他服务器时,能否免密登录。

    如何设置免密:

    6.2.1设置免密远程登录

    (1)在jenkins所在的服务器上输入如下命令

    ssh-keygen -t rsa   敲三次回车

     

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

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

     

    (3)给对应文件授权

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

    (4)把155上的公钥复制到156上  

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

    (5)测试155登录156

     ssh 192.168.223.156

    7.使用脚本在jenkins 完成jar的复制

    1. #!/bin/bash
    2. echo "部署的目录和项目名称"
    3. DIR="/data/app"
    4. projectName="my-boot"
    5. echo "待部署的应用服务器,可多台"
    6. server_ips="192.168.223.156"
    7. for server_ip in ${server_ips[@]}
    8. do
    9. echo "ssh连接进行备份操作"
    10. ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
    11. mkdir -p $DIR/backup/${projectName}
    12. mkdir -p $DIR/${projectName}
    13. if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
    14. mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar
    15. fi
    16. EOF
    17. echo "拷贝jar包到目标服务器的tmp目录"
    18. scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar
    19. echo "ssh远程连接进行发布操作"
    20. ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
    21. mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar
    22. EOF
    23. done
    24. echo "success"

    注意:记得修改服务器的地址

    修改代码并上传到gitee   测试是否能够自动复制到应用服务器中156

    此时156已成功复制

     

    在项目所在文件夹创建一个启动脚本start.sh,让项目自动启动 

    vi start.sh

    1. #!/bin/bash
    2. set -e #任何命令出错就退出
    3. set -o pipefail
    4. APP_ID=my-boot
    5. APP_DIR="/data/app"
    6. nohup java -jar ${APP_DIR}/${APP_ID}/${APP_ID}.jar > release_out.log &
    7. start_ok=false
    8. if [[ $? = 0 ]];then
    9. sleep 3
    10. tail -n 10 release_out.log
    11. sleep 5
    12. tail -n 50 release_out.log
    13. fi
    14. aaa=`grep "Started" release_out.log | awk '{print $1}'`
    15. if [[ -n "${aaa}" ]];then
    16. echo "Application started ok"
    17. exit 0
    18. else
    19. echo "Application started error"
    20. exit 1
    21. fi

     创建一个关闭脚本,让项目自动关闭

    1. #!/bin/bash
    2. APP_ID=my-boot
    3. ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh

    此时权限不够

    chmod 777 start.sh

    chmod 777 stop.sh

    此时两个脚本的运行还需要手动运行 

     

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

    再次修改代码测试是否成功,能否自动启动 

  • 相关阅读:
    【高阶数据结构】跳表
    adb 一些命令操作记录
    MongoDB - 聚合查询
    Pytorch中的view()函数的用法
    2022-10-28 linux IO指令 读写GPIO口电平实例
    OAuth2
    二叉树最近公共祖先
    课堂教学效率低?这个方案很适合
    LabVIEW调用库函数节点无法显示DLL中的函数
    计算机视觉基础——基于yolov5-face算法的车牌检测
  • 原文地址:https://blog.csdn.net/Ysuhang/article/details/126354797