• 使用Jenkins + docker打包部署后端服务


    老板给了两台服务器,一台windows用来打包,一台linux用于构建镜像 + 部署,于是有了这篇笔记

    安装Jenkins

    下载地址:https://www.jenkins.io/download/
    找到对应版本下载安装就行,装好之后在浏览器输入localhost:port(port是你安装时设置的端口),看到如下页面:

    就说明装好了,然后用安装的时候设置好的账号密码登录

    配置

    1、配置工具
    在这里插入图片描述
    在这里插入图片描述

    进入页面后首先是添加maven的配置文件:

    maven配置文件

    然后配置工具:

    jdk

    git

    maven

    配置好之后应用保存

    2、配置Publish over SSH

    这一步是为了把文件推送到远程服务器,不需要的可以跳过

    首先去插件商店安装publish over ssh

    进入之后搜索publish over ssh,然后安装

    安装完成后进入系统配置,拉到最下面,就可以看到publish over ssh的配置了



    配置完之后同样应用保存

    创建流水线打包

    在这里插入图片描述

    配置自动触发的条件,不勾就是手动触发咯在这里插入图片描述
    然后就是最重要的流水线语法了
    在这里插入图片描述
    可以点击这里帮助生成
    在这里插入图片描述
    在这里插入图片描述
    下拉框那里,如果是linux命令选择sh:xxx
    window命令选择bat:xxx
    git命令选择git:xxx
    publishSSH选择SSH Publishers:XXX

    以下是我流水线示例:

    pipeline {
        agent any 
        stages {
            stage('拉取代码') {
                steps {
                    checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'xxx', url: 'http://XXX.git']]])
                    echo '拉取代码成功'
                }
            }
            stage('编译构建') {
                steps {
                    //输出当前jenkins的工作目录
                    echo "${env.WORKSPACE}" 
                    //仅打包file-service模块
                    bat 'mvn clean package -pl file-service -am'
                    echo '编译成功'
                }
            }
            stage('推送jar包') {
                steps {
                    sshPublisher(publishers: 
                        [sshPublisherDesc(
                            configName: 'ssh253', 
                            transfers: [sshTransfer(
                                cleanRemote: false, 
                                excludes: '', 
                                execCommand: '''cd local/file
                                            ./start.sh''', 
                                execTimeout: 120000, 
                                flatten: false, 
                                makeEmptyDirs: false, 
                                noDefaultExcludes: false, 
                                patternSeparator: '[, ]+', 
                                remoteDirectory: 'file', 
                                remoteDirectorySDF: false, 
                                removePrefix: 'file-service\\target\\', 
                                sourceFiles: 'file-service\\target\\file-service-1.0-SNAPSHOT.jar'
                            )], 
                            usePromotionTimestamp: false, 
                            useWorkspaceInPromotion: false, 
                            verbose: false
                        )])
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    1、stage表示流水线每一步的名字,执行之后是这个样子:
    在这里插入图片描述

    2、拉取代码
    credentialsId:你配置的凭证id
    配置凭证
    在这里插入图片描述在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    查看凭证
    在这里插入图片描述
    url:你的git项目地址

    3、编译构建
    使用maven进行打包的命令而已

    4、推送jar包
    我是用流水线语法生成器生成的
    在这里插入图片描述
    Source files: 要发送的源文件位置,表示当前工作空间下的file-service\target\file-service-1.0-SNAPSHOT.jar包,\是windows上的路径写法,如果要发送整个文件,则使用/* *
    Remove prefix: 去除的前缀,表示只要文件不要目录,如果不去除,那么文件复制到服务器上后会生成file-service\target\目录
    Remote directory: 远程机的路径,这个路径是以系统配置publish over ssh的Remote directory为当前文件夹的相对路径,开头不写/
    Exec command文件推送完之后的命令

    以上,流水线就做好了,点击“build Now”就可以打包并且推送到服务器对应位置上了

    构建镜像

    现在jar包已经有了,并且到了它该在的位置,需要来构建镜像并启动
    安装docker
    使用命令:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    或者:curl -sSL https://get.daocloud.io/docker | sh

    编写dockerfile
    docker需要使用dockerfile来构建镜像,先新建一个dockerfile文件

    #jdk基础镜像
    FROM anapsix/alpine-java:8_server-jre_unlimited
    
    #作者
    MAINTAINER CarinaYang
    
    #执行命令,主要用来安装相关的软件
    #RUN 
    
    #添加文件
    ADD admin-service-1.0-SNAPSHOT.jar /usr/local
    #使用外面的配置文件
    ADD admin-service.yml /usr/local
    
    #挂载目录到容器
    #VOLUME ["/data"]
    
    #开放端口
    EXPOSE 9000
    
    #启动时执行的命令
    CMD ["/bin/bash"]
    
    ENV JAVA_OPTS="\
    -Xms2048m -Xmx2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M"
    
    #启动时执行的命令
    ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar -Dspring.config.location=/usr/local/admin-service.yml /usr/local/admin-service-1.0-SNAPSHOT.jar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    构建镜像
    这里我是直接使用脚本来写的,创建脚本start.sh

    #!/bin/bash
    # 定义应用组名
    group_name='springcloud'
    # 定义应用名称
    app_name='admin-service'
    # 定义应用版本
    app_version='1.0-SNAPSHOT'
    echo '----停止消息服务 ----'
    docker stop ${app_name}
    echo '----删除实例----'
    docker rm ${app_name}
    echo '----删除旧镜像----'
    docker rmi ${group_name}/${app_name}:${app_version}
    echo '----打包镜像----'
    # 打包编译docker镜像
    docker build -t ${group_name}/${app_name}:${app_version} .
    echo '----启动镜像----'
    docker run -itd -p 9000:9000 --restart=always  --name ${app_name}  ${group_name}/${app_name}:${app_version}
    echo '----启动完成----'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    docker run 里面的 --restart=always是为了开机自启动设置的,因为服务器每天晚上要关机,不需要可以不写
    因为没有部署镜像仓库就直接启动镜像了,如果有的话要推到镜像仓库上去

    启动脚本

    ./start.sh
    
    • 1

    当然,可以直接加到jenkins流水线“推送jar包”步骤的execCommand中,这样Jenkins推送jar包过来后就会自动启动脚本了

  • 相关阅读:
    这才是老板爱看的人力资源分析报表,你只是在做“流水账”!
    位图的使用与实现
    SWT/ANR问题--Native方法执行时间过长导致SWT
    @react-google-maps/api实现谷歌地图中添加多边围栏,并可编辑,编辑后可获得围栏各个点的经纬度
    查询优化_关联查询与子查询优化
    一月内骗子连续“杀猪”,两人被骗258万,竟还有211女硕士
    如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 2
    【ubuntu】中screen的安装与使用
    Java泛型总结
    c#构建具有用户认证与管理的socks5代理服务端
  • 原文地址:https://blog.csdn.net/CarinaYang/article/details/126062761