zoukankan      html  css  js  c++  java
  • centos7部署jenkins和发布springboot项目

    虽然之前搭建过了,但是那时候比较急(只在自己github记了一些相关的博客文章链接),有些步骤不是很熟,干脆从头做一遍记录。

    ps:下面记录比较乱,建议如果同样对jenkins不熟练的同行,看看其他文章。下面这个主要是给我自己回顾流程的。
    ps:下面记录比较乱,建议如果同样对jenkins不熟练的同行,看看其他文章。下面这个主要是给我自己回顾流程的。
    ps:下面记录比较乱,建议如果同样对jenkins不熟练的同行,看看其他文章。下面这个主要是给我自己回顾流程的。
    ps:下面记录比较乱,建议如果同样对jenkins不熟练的同行,看看其他文章。下面这个主要是给我自己回顾流程的。

    1. 安装JDK1.8 (其实个人可以考虑11,只不过大多数生产还是用8多一点)

    1.1 查看自己的CPU是Intel还是AMD

    这里我是Intel的CPU

    [root@ash /]# cat /proc/cpuinfo | grep 'model name'
    model name      : Intel(R) Xeon(R) Gold 6161 CPU @ 2.20GHz
    

    1.2 CPU是否支持x64指令集

    (下面指令返回1说明支持x64指令)

    [root@ash /]# cat /proc/cpuinfo  | grep flags | grep lm | wc -l
    1
    

    linux查看cpu是否支持64位的方法

    1.3 下载和配置JDK8

    1. 去Oracle官网下载Linux版本x64的JDK8

    找合适的JDK包

      ps: 下载需要登录Oracle账号,这个注册什么的都比较卡。
    
    1. 之后把下载的文件传到服务器,我是用的FileZilla软件,方便点。

      ps: 个人习惯,喜欢把自己下载的东西,都放在/usr/etc目录下(默认没有这个目录,需要新建)

    2. 解压jdk

    [root@ash etc]# tar -zxvf jdk-8u271-linux-x64.tar.gz
    

    ps: 个人习惯,把原本下载的压缩包保留,移动到对应的文件夹里

    [root@ash etc]# mv jdk-8u271-linux-x64.tar.gz jdk1.8.0_271/
    

    1.3 配置全局(所有用户生效)的jdk环境变量

    # 查看jdk解压后的路径
    [root@ash jdk1.8.0_271]# pwd
    /usr/etc/jdk1.8.0_271
    
    # 配置环境jdk8变量(移动到最下面,添加以下几行)
    [root@ash jdk1.8.0_271]# vim /etc/profile
    
    # jdk8
    export JAVA_HOME=/usr/etc/jdk1.8.0_271
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    
    

    使jdk配置立即生效

    [root@ash etc]# source /etc/profile
    

    验证,查看jdk版本

    [root@ash etc]# java -version
    java version "1.8.0_271"
    Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
    Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
    

    2. maven部分(之后部署SpringBoot需要用到)

    2.1 下载maven

    1. 官网下载最新3.6.3的maven。

    1. 把下载好的maven传到服务器(我用的工具是FileZilla)

    2. 解压maven压缩包

    个人习惯把自己下载的都丢/usr/etc目录下,然后把解压后的源压缩包再丢到解压后的目录里。

    tar -zxvf apache-maven-3.6.3-bin.tar.gz
    
    [root@ash etc]# ls
    apache-maven-3.6.3  jdk1.8.0_271
    
    [root@ash etc]# cd apache-maven-3.6.3/
    
    [root@ash apache-maven-3.6.3]# ls
    apache-maven-3.6.3-bin.tar.gz  bin  boot  conf  lib  LICENSE  NOTICE  README.txt
    

    2.2 配置maven环境变量

    1. 修改配置文件/etc/profile
    vi /etc/profile
    
    # 移动到最底部,添加如下几行(MAVEN_HOME需要根据自己放的地方修改)
    
    # maven
    export MAVEN_HOME=/usr/etc/apache-maven-3.6.3
    export PATH=$MAVEN_HOME/bin:$PATH
    
    1. 使环境变量生效
    source /etc/profile
    

    2.3 检验环境变量是否生效

    # 有输出,说明成功
    [root@ash apache-maven-3.6.3]# mvn -v
    Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
    Maven home: /usr/etc/apache-maven-3.6.3
    Java version: 1.8.0_271, vendor: Oracle Corporation, runtime: /usr/etc/jdk1.8.0_271/jre
    Default locale: en_US, platform encoding: UTF-8
    OS name: "linux", version: "3.10.0-1062.12.1.el7.x86_64", arch: "amd64", family: "unix"
    

    2.4 修改maven使用国内仓库源

    进入maven所在目录的conf目录内,修改settings.xml文件

    vim settings.xml
    /mirror
    
    # 在 <mirrors>前添加阿里仓库,最后如下
    <mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>central</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
    

    3. jenkins部分

    3.1 下载jenkins

    jenkins官方下载地址
    这里我选择TLS的CentOS版本

    根据官方的流程

    To use this repository, run the following command:

    WARNING: The gpg key use to sign our packages has been updated on 16th of April 2020, therefore you need to reimport it if you imported before this date.

    sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
    sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
    

    If you've previously imported the key from Jenkins, the rpm --import will fail because you already have a key. Please ignore that and move on.

    yum install jenkins
    

    The rpm packages were signed using this key:

    pub   rsa4096 2020-03-30 [SC] [expires: 2023-03-30]
          62A9756BFD780C377CF24BA8FCEF32E745F2C3D5
    uid                      Jenkins Project 
    sub   rsa4096 2020-03-30 [E] [expires: 2023-03-30]
    

    3.2 开启jenkins服务

    查看jenkins服务状态,默认没有开启,需要我们自己打开服务

    # 查看服务状态
    [root@ash ~]# systemctl status jenkins
    ● jenkins.service - LSB: Jenkins Automation Server
       Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
       Active: inactive (dead)
         Docs: man:systemd-sysv-generator(8)
    
    
    # 开启服务 , 这里可能出现这个异常,没有的就可以直接继续下面的流程了。这里遇到问题就顺便解决下。
    [root@ash ~]# systemctl start jenkins
    Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.
    
    # 再根据提示信息,查看下jenkins的服务状态 (下面)
    [root@ash ~]# systemctl status jenkins -l
    ● jenkins.service - LSB: Jenkins Automation Server
       Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
       Active: failed (Result: exit-code) since Sat 2020-11-21 20:18:41 CST; 1min 46s ago
         Docs: man:systemd-sysv-generator(8)
      Process: 8850 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=1/FAILURE)
    
    Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: Starting LSB: Jenkins Automation Server...
    Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 runuser[8855]: pam_unix(runuser:session): session opened for user jenkins by (uid=0)
    Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 jenkins[8850]: Starting Jenkins bash: /usr/bin/java: No such file or directory
    Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 jenkins[8850]: [FAILED]
    Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: jenkins.service: control process exited, code=exited status=1
    Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: Failed to start LSB: Jenkins Automation Server.
    Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: Unit jenkins.service entered failed state.
    Nov 21 20:18:41 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: jenkins.service failed.
    
    # 上面提到 /usr/bin/java: No such file or directory ,
    # jenkins是依赖java的,但是其直接默认我们是把java安装在了/usr/bin/java下,
    # 然而并没有,所以这里再修改下jenkins关于java的配置文件
    
    # 查看我们java位置(第一个)
    [root@ecs-sn3-medium-2-linux-20200117011904 jenkins]# whereis java
    java: /usr/etc/jdk1.8.0_271/bin/java /usr/etc/jdk1.8.0_271/jre/bin/java
    
    # 修改jenkins配置文件
    [root@ash ~]# vim/etc/init.d/jenkins
    
    # 找到 candidates=" 的位置,行末尾添加我们的java路径 (/usr/etc/jdk1.8.0_271/bin/java)
    
    # 重启jenkins服务(出现警告,根据警告做 systemctl daemon-reload)
    [root@ash jenkins]# systemctl start jenkins
    Warning: jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units.
    
    [root@ash jenkins]# systemctl daemon-reload
    
    # 再次查看jenkins服务状态,发现已经正常启动
    [root@ecs-sn3-medium-2-linux-20200117011904 jenkins]# systemctl status jenkins
    ● jenkins.service - LSB: Jenkins Automation Server
       Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
       Active: active (running) since Sat 2020-11-21 20:36:56 CST; 1min 26s ago
         Docs: man:systemd-sysv-generator(8)
       CGroup: /system.slice/jenkins.service
               └─9003 /usr/etc/jdk1.8.0_271/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=tru...
    
    Nov 21 20:36:56 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: Starting LSB: Jenkins Automation Server...
    Nov 21 20:36:56 ecs-sn3-medium-2-linux-20200117011904 runuser[8989]: pam_unix(runuser:session): session o...)
    Nov 21 20:36:56 ecs-sn3-medium-2-linux-20200117011904 jenkins[8984]: Starting Jenkins [  OK  ]
    Nov 21 20:36:56 ecs-sn3-medium-2-linux-20200117011904 systemd[1]: Started LSB: Jenkins Automation Server.
    Hint: Some lines were ellipsized, use -l to show in full.
    
    

    jenkins 启动失败:Job for jenkins.service failed because the control process exited with error code. See

    3.3 jenkins初始化配置

    前面安装好了jdk、jenkins,并且开启了jenkins服务,这里就正式装一些jenkins常用的插件。

    jenkins服务默认在8080端口启动,这里直接访问ip:8080,就可以进入到jenkins的界面

    按照步骤走就好了....(安装推荐的插件)

    慢慢等待...

    根据步骤创建管理员账号

    jenkins默认端口8080,需要配合修改jenkins的配置文件才能生效(改了需要重启jenkins服务才生效 [root@ash jenkins]# systemctl restart jenkins)

    接着就ok了

    ps: 我是打算改jenkins的访问端口。方法如下(当然云服务器,需要开放对应的端口,不然防火墙过不去的)

    [root@ash jenkins]# vim /etc/sysconfig/jenkins
    
    #找到JENKINS_PORT="8080",修改成自己要的jenkins启动(服务)端口
    

    然后重启jenkins服务

    [root@ash jenkins]# systemctl restart jenkins
    

    然后jenkins管理页面对应的修改“Jeknins_URL”属性。

    主页 => 系统管理 => 系统配置 => Jenkins Location => Jenkins URL (修改成 http://服务器IP:前面配置的端口/)

    jenkins 更改默认端口

    3.4 jenkins部署来自gitee的项目——前置准备

    1. 简单建只含有映射/test的controller的springboot项目

    我这里直接在自己公开的gitee仓库放了一个测试用的java项目jenkins-demo,懒得创建的可以直接clone一个

    1. jenkins安装一些常用插件

    主页 => 系统管理 => 插件管理 => "可选插件"

    这里安装的主要是:

    这里把上面说的4个都先装了。(安装新的插件后需要重启jenkins才能生效)

    1. jenkins全局工具配置

    主页 => 系统管理 => 全局工具配置

    • maven配置

    • JDK设置

    • git设置
      如果没有,就临时安装下,我这里发现没有。就yum -y install git。临时装了个git。
      如果yum下载软件很慢,可以网上找下修改国内源的方法。
      比如我这里centos7,修改成阿里源

    wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
    yum clean all
    yum makecache
    

    修改好 maven、jdk、git得到配置后保存。

    1. gitee配置

    主页 => 系统管理 => 系统配置

    找到“gitee配置”

    这里需要临时去gitee用户那里弄个私人令牌

    复制上面的文字,到jenkins上配置。

    测试一下连接

    1. 服务器ssh配置

    主页 => 系统管理 => 系统配置

    找到最下面 “Publish over SSH”

    • Name 随便写
    • HostName 服务器ip
    • username 服务器登录的用户名,比如root之类的
    • Remote Directory 远程登录后,进那个目录。这个直接填"/",根目录

    然后,在需要拉取gitee项目并跑项目的服务器上(也就是上面hostname配置的),生成密钥对。

    ssh-keygen -t rsa
    

    [root@ash .ssh]# ls
    authorized_keys  id_rsa  id_rsa.pub
    [root@ash .ssh]# cat id_rsa
    

    上面这个是在用户目录的.ssh目录下,即~/.ssh

    把 id_rsa.pub的内容复制,粘贴到authorized_keys的最后一行。

    vi authorized_keys
    # 把id_rsa.pub复制的内容粘贴到最后一行并保存
    

    把 id_rsa的内容复制,放到jenkins的配置里。

    测试一下是否配置好ssh

    如果爆红。那就是上面id_rsa的内容没复制到jenkins,或者 id_rsa.pub内容没复制到服务器authorized_keys的最后一行。
    authorized_keys文件,在当前用户的.ssh目录下,即~/.ssh

    3.5 新建job,从gitee拉取项目部署

    1. jenkins => 主页 => 新建任务

    选择自由风格的项目来创建

    1. 填写gitee项目连接

    1. 源码管理,选择git,配置gitee信息

    这里需要临时添加一下凭证

    这里图片里git链接是我之前截图的,和后面使用的git项目链接不一样。最后使用的是(git@gitee.com:Ashiamd/jenkins-test.git

    1. 构建触发器

    这个需要临时到gitee上配置webhook

    下面这个项目名无视,这个老项目名,后面删了。

    1. 构建环境

    1. 构建

    选择 最下面一个,maven选项

    目标:clean install

    1. 构建后操作

    1. 前面构建环境用到一个restart.sh脚本,这里到服务器里编写一下

    这里参考Jenkins+Maven+Github+Springboot实现可持续自动部署(非常详细)

    下面JAVA_HOME、jar包名称,需要根据实际需求修改。这里我都改成了jenkins-demo(该脚本改至上述文章)

    echo "stop服务开始"
    pidlist=`ps -ef|grep demo-0.0.1-SNAPSHOT.jar | grep -v "grep"|awk '{print $2}'`
    #ps -u $USER|grep "Java"|grep -v "grep"
    if [ "$pidlist" = "" ]; then
            echo "no demo-0.0.1-SNAPSHOT.jar pid alive"
    else
            echo "demo-0.0.1-SNAPSHOT.jar Id list :$pidlist"
            for pid in ${pidlist}
            {
                    kill -9 $pid
                    echo "KILL $pid:"
                    echo "service stop success"
            }
    fi
    echo "stop服务脚本结束"
    echo "start服务脚本开始"
    JAVA_HOME=/usr/etc/jdk1.8.0_271
    dir=/opt/jenkins_jars
    cd $dir
    echo dir=$dir
    jar=$(find /lib -type f -name *.jar)
    classpath=$dir/*:$dir/lib/*:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
    echo classpath=$classpath
    echo ---------------------------------------------
    nohup $JAVA_HOME/bin/java -classpath $classpath -XX:-UseGCOverheadLimit -Xms1024m -Xmx2048m -jar $dir/demo-0.0.1-SNAPSHOT.jar > $dir/log/$(date +'%Y%m%d').log 2>&1 &
    echo "start服务脚本结束"
    

    ps: 脚本里用到了log目录,需要新建一个。不然这个脚本执行不了

    mkdir log
    [root@ash jenkins_jars]# ls
    demo-0.0.1-SNAPSHOT.jar  log  restart.sh
    

    可以先自己检验这个脚本有没有用。(如果有效,执行sh restart.sh后,jps应该多一个进程)

    检验完,再kill这个进程,之后通过jenkins拉取gitee,然后部署java项目。

    [root@ash jenkins_jars]# kill 19257
    [root@ash jenkins_jars]# jps
    9587 jenkins.war
    19336 Jps
    

    3.6 构建项目

    前面gitee相关的、jdk、maven、服务器SSH什么的都配置好了之后,回到jenkins面板,构建项目

    这个gitee的测试项目,用的8081端口启动。通过http://服务器IP:8081/test查看是否显示测试数据“test success!”。

    (Ashiamd的github个人学习笔记)[https://ashiamd.github.io/docsify-notes/#/README] ~小尾巴~
  • 相关阅读:
    Git学习
    flask学习5 错误页面
    flask学习4-会话
    flask学习3
    线性代数复习
    flask学习2
    flask学习1
    windows下安装easy_install,pip,及flask入门教程链接
    MacOS Terminal调用Python代码
    [java] 类变量初始化顺序
  • 原文地址:https://www.cnblogs.com/Ashiamd/p/14017989.html
Copyright © 2011-2022 走看看