zoukankan      html  css  js  c++  java
  • Linux安装Jenkins并构建SpringBoot工程

    1. 简介

      Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。前身是Hudson是一个可扩展的持续集成引擎。可用于自动化各种任务,如构建,测试和部署软件。
      官网:https://www.jenkins.io/zh/

    • 主要用于:
      • 持续、自动地构建/测试软件项目,如CruiseControl与DamageControl;
      • 监控一些定时执行的任务。
    • 特点:
      • 开源免费;
      • 跨平台,支持所有的平台;
      • master/slave支持分布式的build;
      • web形式的可视化的管理页面;
      • 安装配置超级简单;
      • tips及时快速的帮助;
      • 已有的200多个插件。

    2. 安装前需要准备

    序号 名称 参考博客
    1 Jdk1.8 Linux安装Jdk1.8并配置环境变量
    2 Maven Linux安装Maven并配置环境变量
    3 Git Linux安装git

    3. 安装Jenkins

    • 添加Jenkins源
    wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
    
    # 如果之前导入过Jenkins密钥,则此步骤报错,请忽略
    rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
    
    • yum源安装Jenkins
    yum -y install jenkins
    
    • 安装完成后重点目录说明
    路径 说明
    /usr/lib/jenkins/jenkins.war War包位置
    /etc/sysconfig/jenkins Jenkins配置文件
    /var/lib/jenkins/ 默认的Jenkins Home目录
    /var/log/jenkins/jenkins.log Jenkins日志文件
    • 修改端口(可选)
    # 因为Jenkins默认端口为8080,容易和Tomcat冲突,因此需要修改为:8010
    vim /etc/sysconfig/jenkins
    
    # 修改参数
    JENKINS_PORT="8010"
    
    • 启动Jenkins
    service jenkins start
    
    • 异常处理
      • 报错
      # 报错信息:
      Starting jenkins (via systemctl): Job for jenkins.service failed because the control process.service" and "journalctl -xe" for details.
      
        因为Jenkins的配置信息中没有Java命令,如果没有安装JDK,则可参考博客:Linux安装Jdk1.8并配置环境变量
        如果通过yum源安装,则Java命令路径为:/usr/bin/java,无需额外配置;如果为介质安装,需要手动添加Java命令路径:/usr/local/java/jdk1.8.0_291/bin/java。建议通过介质安装JDK1.8。
      vim /etc/init.d/jenkins
      
      # 在属性candidates中添加java命令路径
      /usr/local/java/jdk1.8.0_291/bin/java
      
      • 警告
      # 警告信息:
      Warning: jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units.
      
        提示Jenkins服务在磁盘上已经修改,建议执行systemctl daemon-reload命令。可以执行,也可忽略。
      • 处理后重新启动Jenkins
      service jenkins start
      

    4. 初始化配置

    • 浏览器访问:http://{ip}:8010

        Jenkins的初始化admin的密码存放在:/var/lib/jenkins/secrets/initialAdminPassword下。
    cat /var/lib/jenkins/secrets/initialAdminPassword
    
    • 安装推荐插件

        推荐安装Jenkins社区推荐的插件。
    • 创建账号

        可以创建管理员账号,也可以使用admin账号。这里,点击使用admin账号继续按钮。
    • 实例配置

        配置Jenkins实例,点击保存并完成即可。

    5. 开始使用

    • 修改admin密码(可选)
        如果已经创建了管理员账号,可以使用自己创建的账号。如果继续使用admin账号,为了安全考虑,建议修改admin账号的密码。修改后重新登录即可。




    • 如果发现Jenkins的汉化并不是很完整,建议重启
    service jenkins restart
    

    • 安装插件
        因为目前大部分项目都是Maven项目,因此,需要安装Maven插件。安装选项建议勾选“安装完成后重启Jenkins(空闲时)”。





        因为需要将项目远程部署到另外一台服务器,因此需要SSH插件。安装选项建议勾选“安装完成后重启Jenkins(空闲时)”。

    • 全局工具配置

      • JDK配置

          需要配置名称,和JAVA_HOME,并取消“自动安装”选项。
      # 如果是yum源安装的jdk1.8,则JAVA_HOME路径查询方法为:
      which java
      
      # 返回
      /usr/bin/java
      
      # ls -l命令
      ls -l /usr/bin/java
      
      # 返回
      lrwxrwxrwx 1 root root 22 Nov 13 14:37 /usr/bin/java -> /etc/alternatives/java
      
      # ls -l命令
      ls -l /etc/alternatives/java
      
      # 返回
      lrwxrwxrwx 1 root root 73 Nov 13 14:37 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64/jre/bin/java
      
      # 则JAVA_HOME路径为:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64
      
      # 如果是介质方式安装,则通过环境变量查询JAVA_HOME
      echo $JAVA_HOME
      
      • Git配置

          需要配置名称,和git命令的路径,并取消“自动安装”选项。
      which git
      
      • Maven配置

          需要配置名称,和MAVEN_HOME路径,并取消“自动安装”选项。
      # Maven建议介质方式安装,可以参考博客:https://www.cnblogs.com/cao-lei/p/14768835.html
      # 根据环境变量查询MAVEN_HOME路径
      echo $MAVEN_HOME
      
    • 系统配置
      • 如果需要部署到远程服务器,需要配置SSH相关信息。




          配置服务器密码,新增SSH,配置名称、主机名、用户名称和远程路径(建议设置为“/”),点击高级设置,可以设置连接端口等信息。设置完成后可以点击“Test Configuration”按钮测试连接。

    6. 构建任务并发布到远程服务器


    •   填写任务名称,选择“构建一个maven项目”,点击“确定”按钮。



    •   可以填写任务描述。
        根据实际情况,可以配置“丢弃旧的构建”。

    •   选择“Git”,填写仓库URL。第一次构建需要设置git账号和密码,以后可以选择之前设置的用户名和密码或者填写新的账号信息。
        点击“Credentials”下的添加按钮,在弹出的页面填写用户名和密码,点击“添加”按钮,然后在左侧选择刚刚添加的账号信息即可。
        默认指定分支为master分支,可以根据需要修改。



    •   如果项目需要固定的时间构建,则可以配置定时构建。

        定时构建的日程表规则如下:
    # 语法
    * * * * *
    
    # 第一个*表示分钟,取值0~59
    # 第二个*表示小时,取值0~23
    # 第三个*表示一个月的第几天,取值1~31
    # 第四个*表示第几月,取值1~12
    # 第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日
    
    # 举例
    # 每5分钟构建一次
    H/5 * * * *
    
    # 每两小时构建一次
    H H/2 * * *
    
    # 每天12点构建一次
    H 12 * * *
    
    # 每天18点构建一次
    H 18 * * *
    
    # 在每前半个小时内的每10分钟构建一次
    H(0-29)/10 * * * *
    
    # 每周一到周五的9点至18点之间,每两小时构建一次
    H 9-18/2 * * 1-5
    

    •   建议勾选“Add timestamps to the Console Output”,勾选后在构建的日志信息中会有时间戳。

    •   本次示例中不需要配置。

    •   配置pom.xml的相对位置,一般pom.xml在项目的根路径,因此不需要改动。
        配置Maven打包命令:clean install -Dmaven.test.skip=true

    •   勾选“Run only if build succeeds”仅在构建成功后运行。

    •   选择“Send build artifacts over SSH”,将构建后的包发送到远程服务器。选择在全局配置中配置的服务器信息,填写迁移包相关信息。

    属性 说明 示例
    Source files 项目生成包的相对路径 target/*.jar
    Remove prefix 包路径前缀 target
    Remote directory 远程服务器的路径,注意此处为全局配置远程路径(“/”)的相对路径 /data/app/jar
    Exec command 指定命令 sh /data/app/startup.sh

      在/data/app下创建文件startup.sh:

    # 创建文件
    cd /data/app
    touch startup.sh
    
    # 编辑内容
    DIR=//data/app/jar/
    JARFILE=web-0.0.1-SNAPSHOT.jar
    
    cd $DIR
    ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}' | xargs kill -9
    java -jar $JARFILE > out.log &
    if [ $? = 0 ];then
            sleep 10
            tail -n 100 out.log
    fi
    
    # 退出并保存,如果在全局配置的SSH用户不是root用户,请给该用户授权
    

    •   如果配置了定时构建,可以等下一次执行时间自动构建。当然,点击左侧“立即构建”或者回到首页,点击后边的“构建”按钮即可。
        在构建过程中,可以在左侧底部点击进度条查看控制台日志。

    7. 构建任务并发布到同一服务器

    sh /data/app/jar2/stop.sh
    sh /data/app/jar2/startup.sh
    
    • 构建后操作(无需配置)
    • 创建脚本
    cd /data/app
    mkdir jar2
    
    # 创建停止脚本
    touch stop.sh
    
    # 编辑内容
    #!/bin/bash
    echo "start stop SpringBoot Application"
    pid=`ps -ef | grep web-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}'`
    if [ -n "$pid" ]
    then
    kill -9 $pid
    fi
    rm -rf /data/app/jar2/*.jar
    echo "end stop SpringBoot Application"
    
    # 保存并退出
    
    # 创建启动脚本
    touch startup.sh
    
    # 编辑内容
    # export BUILD_ID=dontKillMe为必须。因为默认Jenkins执行完后会kill自己的进程,因此也会将启动的进程kill。
    #!/bin/bash
    export BUILD_ID=dontKillMe
    echo "start startup SpringBoot Application"
    cp /usr/local/maven/repository/com/c3stones/web/0.0.1-SNAPSHOT/web-0.0.1-SNAPSHOT.jar /data/app/jar2
    cd /data/app/jar2/
    nohup java -jar web-0.0.1-SNAPSHOT.jar &
    echo "end startup SpringBoot Application"
    
    # 保存并退出
    


    • 特别注意
        因为Jenkins使用的默认用户为jenkins,因此在配置完成后,执行构建操作会提示没有权限。
    + sh /data/app/jar2/stop.sh
    start stop SpringBoot Application
    /data/app/jar2/stop.sh: line 6: kill: (28812) - Operation not permitted
    end stop SpringBoot Application
    + sh /data/app/jar2/startup.sh
    start startup SpringBoot Application
    cp: cannot create regular file ‘/data/app/jar2/web-0.0.1-SNAPSHOT.jar’: Permission denied
    end startup SpringBoot Application
    Error: Unable to access jarfile web-0.0.1-SNAPSHOT.jar
    

      有两种解决方案:
      (1)修改Jenkins默认用户为root,快速但不安全;

    vim /etc/sysconfig/jenkins
    
    # 修改JENKINS_USER="jenkins"为root
    JENKINS_USER="root"
    
    # 退出并保存
    
    # 重启Jenkins
    service jenkins restart
    

      (2)给Jenkins用户授权,安全推荐使用;
      此示例使用第一种方案。

    8. 扩展

      可以将上述Post Steps执行两种脚本合并为一个脚本即可:

    # 在执行shell只改为
    sh sh /data/app/jar2/restart.sh
    
    # 创建重启脚本
    cd /data/app/jar2
    touch restart.sh
    
    # 编辑内容
    #!/bin/bash
    # stop
    echo "start stop SpringBoot Application"
    pid=`ps -ef | grep web-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}'`
    if [ -n "$pid" ]
    then
    kill -9 $pid
    fi
    rm -rf /data/app/jar2/*.jar
    echo "end stop SpringBoot Application"
    
    # start
    export BUILD_ID=dontKillMe
    echo "start startup SpringBoot Application"
    cp /usr/local/maven/repository/com/c3stones/web/0.0.1-SNAPSHOT/web-0.0.1-SNAPSHOT.jar /data/app/jar2
    cd /data/app/jar2/
    nohup java -jar web-0.0.1-SNAPSHOT.jar &
    echo "end startup SpringBoot Application"
    
  • 相关阅读:
    .net(关于字符串的相等问题[比较重要])
    .net(基本数据类型,枚举类型,枚举字符串的相互转化)
    如何安全的读入一个整数或者浮点数
    .net(数组)
    什么是EAI?
    PowerShell 入门
    sql server 2005 如何删除前几条记录或重复记录
    如何查看客户端的IP地址,机器名,MAC地址,登陆名等信息
    sql server 2005 几个常用的存储过程或函数
    ASP.NET 母版页的加载顺序
  • 原文地址:https://www.cnblogs.com/cao-lei/p/14768858.html
Copyright © 2011-2022 走看看