Jenkins 搭建

Jenkins 搭建




Jenkins 搭建

    # yum install git-all
    # yum install -y java-1.8.0-openjdk
    # wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
    # rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key   \\ 安装jenkins key
    # yum install -y jenkins
    # systemctl restart jenkins

    http://192.168.10.12:8080    \\ 默认安装即可
    # tail /var/lib/jenkins/secrets/initialAdminPassword             \\ 可以获取管理员 密码

    # vim /etc/sysconfig/jenkins          \\ 主配置文件
    # tail /var/log/jenkins/jenkins.log    \\ 日志文件
    # ls /var/lib/jenkins/                  \\ 主程序目录 jenkins存放数据不依靠数据库,所以在移植时只需要拷贝整个程序主目录即可
        jobs        \\ 浏览器上面创建的任务都会存放在这里
        logs         \\ 存放jenkins相关的日志
        nodes         \\ 多节点时用到
        plugins        \\ 插件所在目录       jobs和plugins目录比较重要
        secrets         \\ 密码秘钥所在目录

    汉化
        Manage Jenkins --> Manage Plugins --> Available --> 搜索 Locale --> 勾选 locale --> Install without restart
            Manage Jenkins --> Configure System --> 找到 Locale 勾选同意 并且输入 zh_cn 保存
            zh_cn  zh_CN   zh_tw  en_us  zh_US


        Manage Jenkins --> Manage Plugins --> 可选插件 --> 搜索 Publish Over SSH 与 Git plugin 并安装 --> 后重启
        # systemctl restart jenkins


发布PHP代码

    添加秘钥
        # ssh-keygen
        # cat ~/.ssh/id_rsa               \\ 复制出来 私钥 添加到 Jenkins服务器
        # ssh-copy-id 192.168.10.13        \\ 复制公钥 到 PHP服务器
        Manage Jenkins --> Configure System --> Publish over SSH --> 复制进去key 
        --> SSH Servers --> 添加上php服务器的信息 --> Test Configuration --> 保存   \\ Remote Directort  /
        
    新建项目
        新建Item  --> 输入名字 --> Freestyle project
            描述         发布 php 代码                                 \\ 自定义
            源码管理     git
                Repository URL: https://github.com/nginx/unit.git       \\ 仓库地址
                Branches to build: */master                              \\ 默认为master
            构建触发器                                \\ 为空即可
            构建环境                                   \\ 为空即可
            构建
                Send files or execute commands over SSH
                Name: 192.168.10.13                    \\ 选择刚 创建的项目名称
                Source files: **/**                     \\ 表示要发布的代码为全部文件
                Remote directory: /data/jenkins_test     \\ 自定义一个存放PHP代码的文件夹名
                Remove prefix:                            \\ 为空即可
                Exec command:                              \\ 为空即可

        Build now --> #1 --> 控制台输出

    # ls /data          \\ 连接192.168.10.13机器 可以看到 更新的代码


修改admin密码               \\ 改成 123456
    # vim /var/lib/jenkins/users/admin_3823215954751182213/config.xml
        <passwordHash>#jbcrypt:$2a$10$/Oo9oBWXI.SsRqd9fLO0ZOGMQEoFNvAcWLt5aYrMhfBp7hEBqWsHC</passwordHash>
    # systemctl restart jenkins


..........................................................................................................


添加秘钥                            \\ 目标服务器上  项目服务器上  在需要登录的服务器上操作

    # ssh-keygen                      \\ 使用要设置秘钥的用户执行  生成 私钥id_rsa   公钥id_rsa.pub
    # cd ~/.ssh                        \\ 到此用户的家目录
    # cat id_rsa.pub > authorized_keys  \\ 创建验证文件      此文件为 公钥
    # chmod 600 authorized_keys          \\ 必须是 600权限
    # chmod 700 ../.ssh                   \\ 必须是 700权限
    # cat id_rsa                           \\ 可复制出来 私钥 放到Jenkins上用于登录目标服务器

    注:
        id_rsa: 私钥                          \\ 可以打开 直接复制到 Jenkins 上 用于登录 目标服务器
        authorized_keys: 公钥文件              \\ 注意设置权限 放到 目标服务器家目录里


添加 项目服务器 到 Jenkins

    Manage Jenkins --> system configuration        \\ 为 jenkins 添加 目标项目服务器 秘钥

        Publish over SSH                   \\ 默认可以添加一个私钥用于登录服务器 也可在SSH Servers里设置单独的秘钥或密码

            SSH Servers --> 新增             \\ 添加 服务器ssh 登录 信息
                Name: 甜杏测试环境
                Hostname: 103.108.142.100
                Username: jump_admin           \\ 这里要给带sudo权限的用户  后面复制以及脚本要sudo
                Remote Directory: /data         \\ 连接后 使用 哪一个目录
                高级 Use password authentication, or use a different key      \\ 勾选 使用密码 或其他 秘钥认证
                    key                           \\ 复制进去 私钥即可
                    Port: 59157
                    Timeout (ms):300000             \\ 默认 其他选项可以不用填写

                test Configguration                   \\ 点击测试 显示 success 即可

    注:
        SSH remote hosts  没用上  也是添加主机的 具体怎么使用 待补充


Jenkins 发布 jar 包

    新建Item --> 输入任务名字  --> 构建一个 maven 项目 --> 配置          \\ 需要先创建秘钥 和 添加主机

    注:
        * 需要   git 地址   打包命令   发布命令
        * $WORKSPACE 目录为: /var/lib/jenkins/workspace/项目名
        * jenkins 会按照配置的顺序 来执行发布操作
            General --> 源码管理 --> 构建触发器 --> 构建环境 --> Pre Steps --> Build --> Post Steps --> 构建设置 --> 构建后操作

    1. General
        描述: wxapp_Link.jar 后端jar包 更新 回滚 根据BUILD_ID

        Discard old builds(丢弃旧的构建)     \\ 有的版本是英文 有的版本是中文 不完全汉化
            策略: log Rotation               \\ 默认即可
                保持构建的天数: 30             \\ 最多保存30天
                保持构建的最大个数: 10          \\ 最多保存10构建的历史记录 用于回滚

        This project is parameterized(参数化构建过程)  --> 添加参数
            Git Parameter(Git 参数)
                名称: Tag               \\ 自定义 标签名字  随便起的名字而已
                描述: 请选择分支          \\ 说明  选择分支的作用
                参数类型: 分支或标签
                默认值: */master           \\ 默认 为 主分支

            String Parameter(字符 参数)
                名称: version                \\ 定义一个变量 version
                默认值: 0                     \\ 此变量的默认值为 0.0 在构建的时候没有用 可以随便写版本号
                                               \\ 在回滚的时候 可以 填写 $BUILD_NUMBER 的值 用于传递 回滚的版本 在脚本里调用
                描述: jenkins构建版本号          \\ 可在脚本中直接使用 $version 调用

            Choice Parameter(选项 参数)
                名称: status            \\ 定义一个变量 status 值为下面的选项 可在脚本中直接使用 $status 调用
                选项:
                    Deploy               \\ 给变量status的值 1是Deploy    2是Rollback  
                    Rollback              \\ 可在脚本中直接使用 $status 调用
                描述:
                    Deploy --发布           \\ 在相应的值下面 写相应要执行的代码
                        
    2. 源码管理
        Git                    \\ 选择 Git
            Repositories
                Repository URL: http://gitlab.ssyy99.net/ssyy99/ssyy99.com.git              \\ git 项目上的地址
                Credentials:      \\ 选择 要使用的 git 用户
                    添加            \\ 如果没有 需要 添加 git账户的 用户名 密码 添加后会在下拉列表里面
                        Domain: 全局凭据(unrestricted)     \\ 默认即可
                        类型: Username with password        \\ 使用 用户名 密码添加
                        范围: 全局
                        用户名: admin
                        密码: 123456
                        ID:                 \\ 可以为空
                        描述: admin 用户

            Branches to build                  \\ 指定分支   上面定义的 tag 标签 可以用于选择分支 调用使用 ${} 的格式
                指定分支(为空时代表any): ${Tag}

    3. 构建触发器                                 \\ 没有勾选

    4. 构建环境
        Delete workspace before build starts       \\ 勾选 开始构建之前删除工作空间  

    5. Pre Steps  \\ 此选项 可以 在 jenkins服务器 从git上 拉下来代码后 在jenkins上执行的 脚本 或 命令 可用于操作 代码里文件
        Add pre-build step --> Execute shell          \\ 如替换密码文件
        命令:                                          \\ 可以添加要执行的命令 如果没有要更改的 可以忽略此项

    6. build                                             \\ 在 jenkins 服务器上 打包   拷贝到 目标服务器
        Root POM: pom.xml                                 \\ java项目下的 pom.xml 文件名   默认即可
        Goals and options: package -P LinkTest  \\ 打包命令 此命令可以接收 mvn的命令参数 完整命令为# mvn package -P LinkTest

    7. Post Steps                                 \\ 在jenkins服务器上 打包之后 执行的 脚本 或 命令 发布步骤
        Run only if build succeeds or is unstable  \\ 选择此项
        Add pre-build step --> Execute shell
        命令:                             \\ 在此为 $WORKSPACE 的目录: /var/lib/jenkins/workspace/tianxing_wxapp_Link
            #!/bin/bash                    \\ 在 jenkins 的脚本 可以 直接使用 jenkins 上的 环境变量
            /opt/scripts/tianxing_scripts/update_jar.sh $WORKSPACE   \\ 此脚本 在jenkins服务器上 用于复制jar包 到远程服务器

    8. 构建设置                                \\ 空

    9. 构建后操作 --> 增加构建后操作步骤 --> Send build artifacts over SSH
        Name: ssyy99测试环境_192.168.10.100
        Transfers:                                                       \\ 其他为空就好 只添加脚本命令
            Exec command                                                  \\ 此脚本未在jenkins上 不可以使用jenkins上的变量
                sudo sh /home/jump_guest/ssyy99_ruoyi-admin_jenkins.sh     \\ 此脚本在 目标服务器上 一定要注意sudo权限 坑

    注: 
        1. 关于 Jenkins 上的环境变量
            $JENKINS_HOME  在主节点上分配的目录的绝对路径 供Jenkins存储数据
            $BUILD_NUMBER  为构建id 初始为1 每一次构建递增1 可用于回滚
            $WORKSPACE     为项目工作目录 实际为 jenkins安装目录+项目名字
            $JENKINS_HOME  为 jenkins 安装目录 在此为 /var/lib/jenkins


关于 Jenkins 用户 及 分配权限
    1. 安装插件
        Manage Jenkins --> Manage Plugins --> 可选插件
            Role-based Authorization Strategy  或 Role-Based Strategy      \\ 安装

        Manage Jenkins --> Configure Global Security
            授权策略
                Role-Based Strategy              \\ 选择此项

    2. 创建用户
        Manage Jenkins --> Manage Users --> 新建用户

    3. 赋予用户单个项目权限
        Manage Jenkins --> Manage and Assign Roles
            Manage Roles(管理角色)
                Global roles                    \\ 对于用户的全局权限设置
                    Role to add: ssyy99 --> add  \\ 添加 ssyy99 用户  此为填写用户名   多用户可以 多条添加
                    Overall
                        Read   勾选
                    job
                        Build  勾选          \\ 是对应权限 这里只给了最低的权限 可以 更新 项目

                Item roles                     \\ 对于用户的某一项目设置  如果不添加默认是有所有项目对应的Global权限
                    Role to add: role1          \\ 规则1    这么名字随便起   后面需要用到此名字 关联
                    Pattern: ssyy99_com          \\ 此为项目名字  赋予多个项目 添加多条  或者可以 使用  ssyy.* 来正则匹配
                                                  \\ 并且 勾选要给的 相关 权限
            Assign Roles(分配角色)
                Global roles                        \\ 用户名关联 系统用户名  这里设置的名字都相同
                    User/group to add: ssyy99        \\ 添加要管理的用户名  并且勾选到 关联的用户 名字相同即可
                Item roles                            \\ 分配给用户 某个项目
                        User/group to add: ssyy99      \\ 这里 勾选 上面创建的 roles1 有多个勾选关联多个  


    发布 jar 包 用到的脚本
        # vim /opt/scripts/tianxing_scripts/update_jar.sh        \\ 备份 复制 jar 包
            #!/bin/bash
            # 运行命令 # nohup java -jar ruoyi-admin.jar > ./nohup.out &
            # 打包命令 # mvn package -P druid      jia包会在 target/ruoyi-admin.jar
            WORKSPACE="$1"
            DATE=`date "+%Y-%m-%d %H:%M:%S"`
            Jar='ruoyi-admin.jar'
            Dir=/opt/scripts/tianxing_scripts

            echo "当前执行时间为:$DATE"
            case $status in
            Deploy)
                    echo "========= status:$status =========="
                    echo "========= 自定义输入version:$version =========="
                    echo $PATH
                    echo "========= 进入jenkins工作目录前端源码所在文件夹 =========="
                    source /etc/profile

                    cd $WORKSPACE

            ########## 用scp命令发动到远程服务器的部署目录下 ##########
                    echo "========== 开始上传jar包到测试服务器 =========="
                    sudo scp -P 59157 -r -i $Dir/jump_guest.pem $WORKSPACE/ruoyi-admin/target/$Jar jump_guest@192.168.10.1:/home/jump_guest/
                    echo "========= 将jar包备份到backup_jar文件夹 =========="

            ########## 备份在jenkins的工作目录下的backup_app文件夹下,方便之后回滚 ##########
            ########## $BUILD_NUMBER 为构建id,初始为1 每一次构建递增1 可用于回滚 ##########
            ########## $WORKSPACE 为项目工作目录 实际为jenkins安装目录+项目名字 ##########
            ########## $JENKINS_HOME 为jenkins安装目录 在此为 /var/lib/jenkins ##########
                    \cp $WORKSPACE/ruoyi-admin/target/$Jar  $JENKINS_HOME/workspace/backup_jar/"$Jar".$BUILD_NUMBER
                    sudo find $JENKINS_HOME/workspace/backup_jar/ -type f -mtime +30 -exec rm -f  {} \;

                echo "deploy done!"
                ;;

            Rollback)
                    backup_path="${JENKINS_HOME}/workspace/backup_jar/"
                    echo "======status:$status========"
                    echo "======build_id:$version======="
                    cd $backup_path
                    ls
                    echo "==============正在回滚 $Jar.$version 包 发送到远程测试服务器==================="
                    sudo scp -P 59157 -r -i $Dir/jump_guest.pem "$Jar".$version  jump_guest@192.168.10.1:/home/jump_guest/$Jar

                echo "roll_back done!"
                ;;
            *)
            esac


        # vim /home/jump_guest/ssyy99_ruoyi-admin_jenkins.sh              \\ 发布 jar 包
            #!/bin/bash
            # 运行命令 # nohup java -jar ruoyi-admin.jar > ./nohup.out &
            # 打包命令 # mvn package -P druid
            DATE=`date "+%Y%m%d%H%M%S"`
            source /etc/profile
            echo “========== 停止甜杏app包 ruoyi-admin.jar ==========”
            PID=`sudo ps -ef |grep "ruoyi-admin.jar" | grep -v grep | awk '{print $2}'`
            if [ -z $PID  ]
            then
              echo "jar 没有在运行 ...运行新的jar包"
            else
              echo "kill $PID"
              sudo kill -9 $PID
            fi
            #
            sleep 6
            echo "========== 发布新版本甜杏app包 ruoyi-admin.jar =========="

            cd /home/jump_guest
            mkdir -p /data/jarRun/bak
            mv /data/jarRun/ruoyi-admin.jar /data/jarRun/bak/ruoyi-admin.jar.$DATE
            mv ruoyi-admin.jar /data/jarRun/ruoyi-admin.jar
            chown root.root /data/jarRun/ruoyi-admin.jar
            sudo find /data/jarRun/bak/ -type f -mtime +30 -exec rm -f  {} \;

            cd /data/jarRun
            nohup java -jar ruoyi-admin.jar > ruoyi.log &
            #nohup java -jar eladmin-system-exec.jar --spring.profiles.active=prod &
            #nohup java -jar eladmin-system-exec.jar --spring.profiles.active=prod > ./nohup.out &
            #chmod 644 /opt/package_version/kok-qs-background/nohup.out


    发布:
        进入项目 --> Build with Parameters
            Tag         选择 分支
            version     选择 版本  发布的时候可以随便写  回滚的时候 写 $BUILD_NUMBER
            status      选择 发布 或 回滚


...........................................................................................................


注:  发布java代码 但是没看        \\ 找此篇  Jenkins入门(二)

    https://so.csdn.net/so/search/all?q=Jenkins%E5%85%A5%E9%97%A8%EF%BC%88%E4%BA%8C%EF%BC%89&t=all&p=1&s=0&tm=0&lv=-1&ft=0&l=&u=







Teo

You must be logged in to post a comment