centos7系统使用docker-compose安装部署jenkins

CentOS7系统使用docker-compose安装部署jenkins,并实现前后端自动构建

记录一次在给公司部署jenkins的真实经历,总结了相关经验

1.准备环境

1.java

由于最新的jenkins需要jdk11以上才能支持,而系统里的jdk是1.8的,因此等jenkins安装好后使用jenkins容器里自带的jdk17

在这里插入图片描述

2.maven

centos7安装maven

1.下载 apache-maven-3.6.3-bin.tar.gz

2.解压

3.vim /etc/profile

​ source /etc/profile

3.node

centos7 使用nvm 下载16以上版本的node可能会遇到如下的报错

在这里插入图片描述

这里直接采用jenkins自动安装node 18

在这里插入图片描述

2.准备docker-compose.yml文件

version : '3'
services:jenkins:user: rootrestart: alwaysimage: jenkins/jenkinscontainer_name: jenkinsenvironment:- TZ=Asia/Shanghaiports:- "10240:8080"- "10241:50000"![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/857e2cfde42a4643bc486ddbf36d3578.png)expose:- "8080"- "50000"volumes:- /data/jenkins/jenkins_home/:/var/jenkins_home/- /data/nginx/html/:/data/nginx/html/- /data/nginx/htmldev/:/data/nginx/htmldev/- /var/run/docker.sock:/var/run/docker.sock- /usr/bin/docker:/usr/bin/docker- /data/maven/apache-maven-3.6.3:/data/maven/apache-maven-3.6.3- /root/.ssh:/root/.ssh
  1. /var/jenkins_home/ 这个是容器里默认的jenkins工作目录,需要挂载出来
  2. /data/nginx/html/和/data/nginx/htmldev/ 分别对应后面前端项目pc端、移动端的dist存放目录,配置于nginx中,挂载出来是由于jenkins配置前端构建的时候需要配置nginx目录
  3. maven挂载刚刚安装的maven

3.执行docker-compose

# 跳转到docker-compose.yml文件目录
cd /data/jenkinsll#执行
docker-compose up -d#查看运行状态
docker ps

4.初始化jenkins

  1. 访问 ip:10240 jenkins后台

    在这里插入图片描述

    查找初始密码

    在这里插入图片描述

  2. 安装插件

    选择安装推荐的插件,这里如果安装失败,后续再手动切换源,安装必要的插件即可

    源:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

    在这里插入图片描述

    docker安装jenkins并配置国内插件镜像地址_jenkins国内镜像-CSDN博客

    Jenkins必备安装插件 - 知乎 (zhihu.com)

    在这里插入图片描述

  3. 创建管理员账号

    在这里插入图片描述

    一直下一步

    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 切换中文(此时还有部分界面是英文)

​ 安装locale插件即可

​ 【jenkins】教你jenkins设置为中文_jenkins 中文插件,2024年最新这操作真香_jenkins设置中文-CSDN博客

5.系统配置

  1. 凭据管理

    在这里插入图片描述

    在这里插入图片描述

    添加全局凭据

    1. git账号密码(拉取代码)

      在这里插入图片描述

    2. gitlab token(用于监听git,自动构建)

      安装gitlab插件

      在这里插入图片描述

      去gitlab生成token,复制

      在这里插入图片描述

      添加gitlab api token凭证

      在这里插入图片描述

  2. 全局工具配置

    1. JDK

      使用jenkins容器自带jdk17

      在这里插入图片描述

    2. maven

      使用本地安装的maven,刚刚已经挂载

      在这里插入图片描述

    3. nodejs

      安装nodejs插件

      在这里插入图片描述

      勾选自动安装,node版本选择18

      在这里插入图片描述

  3. 系统配置

    在这里插入图片描述

    1. 远程部署配置

      安装远程部署插件

      在这里插入图片描述

      配置publish over ssh - SSH Servers

      1. 远程部署客户测试环境

        在这里插入图片描述

      2. 远程部署公司开发环境

        在这里插入图片描述

    2. gitlab连接配置

      在这里插入图片描述

6.新建构建任务

1.后端(含备份、回滚)

1.本机部署

举例:构建测试服务器(本地),从git的develop分支拉取代码

  1. 选择自由风格

    在这里插入图片描述

  2. 设置保留构建历史数量

    在这里插入图片描述

  3. 配置参数化构建,为了实现回滚

    在这里插入图片描述

    在这里插入图片描述

  4. 配置源码管理

    在这里插入图片描述

  5. 构建环境

    在这里插入图片描述

  6. 增加构建步骤

    maven

    在这里插入图片描述

    备份

    在这里插入图片描述

    #!/bin/bash 
    case $Status  indeploy)echo "Status:$Status"path="${WORKSPACE}/csms-admin/bak/${BUILD_NUMBER}"      #创建每次要备份的目录if [ -d $path ];thenecho "The files is already  exists "elsemkdir -p  $pathfi\cp -f ${WORKSPACE}/csms-admin/target/*.jar $path        #将打包好的jar包备份到相应目录,覆盖已存在的目标echo "bak ------------ Completing!";;rollback)echo "Status:$Status"echo "Version:$Version"echo "BUILD_NUMBER:$BUILD_NUMBER"v=$Versionif [ $Version -eq 0 ]; thenv=$(($BUILD_NUMBER - 2))  # 如果 $Version 是 0,则赋值为 $BUILD_NUMBER - 2fiecho "回滚到版本--v:${v}"cd ${WORKSPACE}/csms-admin/bak/${v}            #进入备份目录\cp -f *.jar ${WORKSPACE}/csms-admin/target/       #将备份拷贝到程序打包目录中,并覆盖之前的jar包;;*)exit;;
    esac
    

    构建新docker镜像并启动

    在这里插入图片描述

    cd ${WORKSPACE}
    docker stop csms-admin || true
    docker rm csms-admin || true
    docker rmi csms-admin || true
    docker build --build-arg profileActive=test --build-arg port=8889 -t csms-admin .
    docker run -d -p 192.168.100.53:8889:8889 --name csms-admin csms-admin
    

    保留10个版本,删除以前的备份

    在这里插入图片描述

    #!/bin/bash
    #rm_file>14day
    ReservedNum=10                      #保留文件数量
    rm_file_dir=${WORKSPACE}/csms-admin/bak  #需要删除文件的路径cd $rm_file_dir    #进入文件夹
    RootDir=$(pwd) #当前文件路径
    FileNum=$(ls -l | grep '^d' | wc -l)    #查找文件夹数量
    OldFile=$(ls -rt | head -1)         #找出最早文件夹
    if [ $RootDir == $rm_file_dir ];then   #判断所在目录是否正确echo $RootDir                             echo $rm_file_dirwhile (($FileNum>$ReservedNum))  #文件数超过设置变量才执行doecho "Delete File:"$RootDir'/'$OldFile   #打印要删除的文件名称rm -rf $RootDir'/'$OldFile                       #删除文件let "FileNum--"                                      #变量自减操作OldFile=$(ls -rt | head -1)         #更新dmp最早文件done
    elseecho "error file path "                         #所在目录不对打印出路径错误
    fi
    
  7. 构建触发器

    配置gitlab监听,自动构建

    在这里插入图片描述

    在这里插入图片描述

    打开gitlab

    在这里插入图片描述

    在这里插入图片描述

    分别粘贴到gitlab-设置-集成

    在这里插入图片描述

  8. 测试

    在这里插入图片描述

    在这里插入图片描述

    git push自动触发jenkins构建

    查看控制台

    在这里插入图片描述

    查看docker容器运行状态

    docker ps
    

    在这里插入图片描述

    后端启动成功

2.远程部署

举例:构建开发服务器(另一台服务器),采用在本机打包、备份,然后通过ssh连接远程开发服务器,传送jar包并执行的方式

  1. 复制一个构建任务

    在这里插入图片描述

    在这里插入图片描述

  2. 修改所有的profile环境,注释docker步骤

    在这里插入图片描述

    在这里插入图片描述

  3. git触发器配置

    (同上)

  4. 增加Send files or execute commands over SSH 步骤

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    #!/bin/bashJAR_HOME='/data/jenkins/jenkins_home/workspace/csms-dev-develop/csms-admin/target'
    WEB_HOME='/data/csms/csms-admin'#停止原来的服务
    ps -ef | grep csms-admin | grep -v grep | awk '{print $2}' | xargs kill -9#替换原来的jar包
    cd ${JAR_HOME}
    mv csms-admin-dev.jar csms-admin.jar
    cp -f csms-admin.jar ${WEB_HOME}#重启服务
    cd ${WEB_HOME}
    nohup sh startup.sh &
    

    startup.sh

    
    #!/bin/bash
    #1,获取myjar的进程号
    PID=$(ps -ef|grep csms-admin| grep -v grep | awk '{print $2}')
    #2,启动myjar的函数
    start(){nohup /data/java/jdk1.8.0_321/bin/java -Dspring.profiles.active=dev -jar -Xms1024m -Xms2048m csms-admin.jar &
    }
    #3,判断1中获取的PID是否存在,即判断myjar有没有启动if [ -z "$PID" ]
    then
    #4,日志echo "Start the csms-admin directly "
    #5,myjar之前没有启动的话,这里直接调用start函数start
    else
    #6,myjar之前启动过且进程依然存活,则kill掉,然后调用start函数echo "kill the existing csms-admin process firstly."kill -9 $PIDecho " $PID has been killed"start
    fi
    

2.前端

由于nginx部署在开发服务器(非jenkins所在服务器),所以前端部署都为远程部署

1.PC端远程部署
  1. 自由风格

    同上

  2. 丢弃旧的构建

    同上

  3. 源码管理

    同上

  4. 构建触发器

    同上

  5. 构建环境

    在这里插入图片描述

  6. 构建步骤

    在这里插入图片描述

    npm install
    rm -rf ${WORKSPACE}/dist
    npm run build:dev
    #本机部署则去掉下面的ssh步骤,这里加上下面的语句
    #rm -rf /data/csms/csms-web/html
    #mkdir -p /data/csms/csms-web/html
    #cp -rf ${WORKSPACE}/dist /data/csms/csms-web/html
    
  7. 增加Send files or execute commands over SSH 步骤

    在这里插入图片描述

    #!/bin/bashDIST_HOME='/data/jenkins/jenkins_home/workspace/csms-vue-test-dev-pc'
    HTML_HOME='/data/csms/csms-web/test/html'#覆盖原来的dist
    cp -rf ${DIST_HOME}/dist/* ${HTML_HOME}/dist
    
2.移动端远程部署
  1. 构建步骤

    在这里插入图片描述

  2. ssh

    在这里插入图片描述

    #!/bin/bashDIST_HOME='/data/jenkins/jenkins_home/workspace/csms-vue-test-dev'
    HTML_HOME='/data/csms/csms-app/test/html'#覆盖原来的dist
    cp -rf ${DIST_HOME}/mobiled_dist/* ${HTML_HOME}/mobiled_dist
    
  3. 其他步骤同PC

7.在jenkins上编写maven的setting文件

有的时候需要临时改下maven的setting文件,或者想编写多份setting文件给不同的构建任务去使用,可以在jenkins上直接进行配置

  1. 添加配置文件

    在这里插入图片描述

    PS:这里没有这个选项的,需要下载插件Jenkins 配置文件管理插件 Config File Provider_jenkins config file provider-CSDN博客

    在这里插入图片描述

    在这里插入图片描述

  2. 全局配置

    在这里插入图片描述

    在这里插入图片描述

  3. 到构建任务里配置

    在这里插入图片描述

    在这里插入图片描述

8.后端项目Dockerfile示例

本文的后端项目对应的Dockerfile,可参考使用,一般放在项目的根目录下

# 基础镜像
FROM openjdk:8-jre# 维护者信息
MAINTAINER asusENV LANG=zh_CN.UTF8
ENV LC_ALL=zh_CN.UTF8# 设置容器时区为当前时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp# 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下
ADD csms-admin/target/csms-admin-*.jar csms.jar# 动态参数
ARG profileActive=dev
ENV profileActive ${profileActive}ARG port=8881
ENV port ${port}# 容器启动执行命令
ENTRYPOINT ["java", "-Xms256M","-Xmx1224M","-Xmn256M","-Xss256K","-Duser.timezone=GMT+8", "-Djava.security.egd=file:/dev/./urandom", "-Dspring.profiles.active=${profileActive}", "-jar", "/csms.jar"]# 声明容器提供服务端口
EXPOSE ${port}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue项目问题汇总

1.el-select: 下拉框显示到了top:-2183px , 添加属性 :popper-append-to-body"false" 2. el-upload: 选过的文件在使用过后记得清空,因为如果有limit1的时候,没有清空会导致不触发onchange 使用自定义上传方法http-request的时…

Swift开发——输出格式化字符

Swift语言是开发iOS和macOS等Apple计算机和移动设备系统应用程序的官方语言。Swift语言是一种类型安全的语言,语法优美自然,其程序从main.swift文件开始执行,程序代码按先后顺序执行,同一个工程的程序文件中的类和函数直接被main.swift文件调用,除了main.swift文件外,工程…

工业自动化领域常见的通讯协议

工业自动化领域常见的通讯协议,包括PROFINET、PROFIBUS、Modbus、Ethernet/IP、CANopen、DeviceNet和BACnet。通过分析这些协议的技术特点、应用场景及优势,比较它们在工业自动化中的性能和适用性,帮助选择最合适的协议以优化系统性能和可靠性…

利用Axios封装及泛型实现定制化HTTP请求处理

本案例旨在教授如何使用Axios库结合TypeScript泛型进行HTTP请求的高级封装,以提升代码的可复用性和类型安全性。我们将通过一个具体的示例,学习如何创建一个通用的请求函数,它能够适应不同类型的API响应,并在请求前后加入自定义逻…

跨文化美学实践:以‘Shockman登峰侠‘为例探析翻译艺术与文化意蕴

"Shockman登峰侠"这一组合,实际上是在尝试融合直译与意译的翻译策略,既保留了原英文名称,又通过附加一个富有象征意义的中文称号来丰富角色的形象和内涵。这种翻译实践,展现了汉语翻译美学中的几个重要方面:…

LeetCode 每日一题 2024/6/10-2024/6/16

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 6/10 881. 救生艇6/11 419. 甲板上的战舰6/12 2806. 取整购买后的账户余额6/13 2813. 子序列最大优雅度6/14 2786. 访问数组中的位置使分数最大6/15 2779. 数组的最大美丽值…

React@16.x(26)useContext

目录 1&#xff0c;上下文的使用2&#xff0c;useContext 1&#xff0c;上下文的使用 之前的文章中介绍过 context上下文。 使用举例&#xff1a; import React, { useState } from "react";const ctx React.createContext();function Child() {return <ctx.C…

Transformer系列:图文详解Decoder解码器原理

从本节开始本系列将对Transformer的Decoder解码器进行深入分析。 内容摘要 Encoder-Decoder框架简介shifted right移位训练解码器的并行训练和串行预测解码器自注意力层和掩码解码器交互注意力层和掩码解码器输出和损失函数 Encoder-Decoder框架简介 在原论文中Transformer用…

论文发表CN期刊《高考》是什么级别的刊物?

论文发表CN期刊《高考》是什么级别的刊物&#xff1f; 《高考》是由吉林省长春出版社主管并主办的省级教育类期刊&#xff0c;期刊以科教兴国战略为服务宗旨&#xff0c;专门反映和探索国内外教育教学和科研实践的最新成果。该期刊致力于为广大教育工作者提供一个高质量的学术…

idea自定义注释模板

1、打开配置 setting -> Editor -> Live Template 2、添加TemplateGroup&#xff0c;并在添加的TemplateGroup下加LiveTemplate 3、配置Live Template 内容&#xff1a; **** Description: * $param$* return $return$ * author $user$* date $date$ $time$**/变量…

oracle RAC安装 保姆级教程

使用SSHXmanager 我的本地IP是172.17.68.68 服务器配置 [rootrac12-1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 #Public IP …

ARP协议相关

把ip地址解析成mac地址这里的mac地址就是路由器的mac地址 免费ARP 源ip和目的ip都是一样的&#xff0c;那怎么让其他人更新arp表呢&#xff1f;&#xff1f; 是因为目标mac是全f&#xff0c;是一个广播报文 如果冲突就是ip一样但是mac又不一样 代理ARP pc1和pc4是在同一个子网…

MySQL安全性策略:用户认证与数据加密

用户认证 定义和重要性 在数据库管理系统中&#xff0c;用户认证是关键的安全策略之一。用户认证意味着验证一个用户是否有权访问数据库系统。这对于确保只有合法用户可以访问和修改数据至关重要&#xff0c;它可以防止未经授权的访问和潜在的数据损坏。 MySQL用户账号管理…

【什么是几度cms,主要功能有什么】

几度CMS内容管理框架是基于 PHP 语言采用最新 Thinkphp 作为开发框架生产的网站 内容管理框架&#xff0c;提供“电脑网站 手机网站 多终端 APP 接口”一体化网站技术解 决方案。她拥有强大稳定底层框架&#xff0c;以灵活扩展为主的开发理念&#xff0c;二次开发方便且…

分库分表实践:单 KEY 业务场景

前言 ​ 随着业务的快速增长和数据量的爆炸性增加&#xff0c;传统的单体数据库架构已经难以满足性能和扩展性的需求。为了解决这一问题&#xff0c;分库分表技术应运而生&#xff0c;成为支撑大规模业务的重要手段。 分库分表方式 中间件 Cobar&#xff1a;阿里巴巴开发的…

C++格式化库fmt使用方法

1. 格式化库fmt简介 fmt github地址 api说明 格式化参数说明 内容的格式化&#xff0c;体现在代码中主要表现为字符串、基本类型、自定义类型的拼接。例如说打印日志、拼接变量等。C中我们会经常使用类似printf,snprintf(C风格使用不方便),std::string.append(繁琐), std::io…

[DDR4] DDR1 ~ DDR4 发展史导论

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解DDR4》 内存和硬盘是电脑的左膀右臂&#xff0c; 挑起存储的大梁。因为内存的存取速度超凡地快&#xff0c; 但内存上的数据掉电又会丢失&#xff0c;一直其中缓存的作用&#xff0c;就像是我们的工…

四川汇聚荣聚荣科技有限公司是干什么的,拼多多运营如何做?

四川汇聚荣聚荣科技有限公司是干什么的&#xff0c;拼多多运营如何做?随着电商行业的快速发展&#xff0c;越来越多的企业开始涉足这一领域。其中&#xff0c;四川汇聚荣聚荣科技有限公司便是其中的一员。那么&#xff0c;这家公司究竟是做什么的呢?简单来说&#xff0c;它是…

WSL Ubuntu安装TensorFlow-GPU、PyTorch-GPU

在Windows 11的WSL Ubuntu中安装TensorFlow-GPU、PyTorch-GPU 0、WSL Ubuntu安装 在Windows 11的商店中下载即可&#xff0c;此处以Ubuntu22.04.3为例 1、CUDA Toolkit安装 参考公孙启的文章Windows11 WSL Ubuntu Pycharm Conda for deeplearning前往nVidia官网下载CUDA …

前端面试题日常练-day70 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备&#xff0c;答案在文末 TypeScript中&#xff0c;以下哪个关键字用于声明一个变量的类型为元组类型&#xff1f; a) tuple b) array c) object d) record 在TypeScript中&#xff0c;以下哪个符号用于声明一个变量的类型为函…