Jenkins多模块打包部署

脚本 mall-docker-start.sh
docker stop mysql
echo '----stop mysql container----'
docker rm mysql
echo '----rm mysql container----'
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7
echo '----start mysql container----'

docker stop redis
echo '----stop redis container----'
docker rm redis
echo '----rm redis container----'
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-d redis:6  redis-server --appendonly yes
echo '----start redis container----'

docker stop rabbitmq
echo '----stop rabbitmq container----'
docker rm rabbitmq
echo '----rm rabbitmq container----'
docker run -p 5672:5672 -p 15672:15672 --name rabbitmq \
-d rabbitmq:3.7.15
echo '----start rabbitmq container----'

docker stop elasticsearch
echo '----stop elasticsearch container----'
docker rm elasticsearch
echo '----rm elasticsearch container----'
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \
-e "cluster.name=elasticsearch" \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:7.6.2
echo '----start elasticsearch container----'

docker stop logstash
echo '----stop logstash container----'
docker rm logstash
echo '----rm logstash container----'
docker run --name logstash -p 4560:4560 -p 4561:4561 -p 4562:4562 -p 4563:4563 \
--link elasticsearch:es \
-v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
-d logstash:7.6.2
echo '----start logstash container----'

docker stop kibana
echo '----stop kibana container----'
docker rm kibana
echo '----rm kibana container----'
docker run --name kibana -p 5601:5601 \
--link elasticsearch:es \
-e "elasticsearch.hosts=http://es:9200" \
-d kibana:7.6.2
echo '----start kibana container----'

docker stop mongo
echo '----stop mongo container----'
docker rm mongo
echo '----rm mongo container----'
docker run -p 27017:27017 --name mongo \
-v /mydata/mongo/db:/data/db \
-d mongo:4.2.5
echo '----start mongo container----'

脚本修改
## windows下的.sh脚本上传到linux上使用,需要修改文件格式,否则会因为有特殊格式存在而无法执行:
#使用vim编辑器来修改
vi mall-docker-start.sh
# 查看文件格式,windows上传上来的默认为dos
:set ff
#修改文件格式为unix
:set ff=unix
#保存并退出
:wq
mall-admin 打包

方式一:构建mall项目中的依赖模块,否则当构建可运行的服务模块时会因为无法找到这些模块而构建失败

## 只install mall-common,mall-mbg,mall-security三个模块
clean install -pl mall-common,mall-mbg,mall-security -am
  • -pl 打包指定模块
  • -am 同时打包所指定模块的依赖模块
  • -amd 同时打包依赖于所指定模块的模块

方式二: mall-admin 打包
在这里插入图片描述

在这里插入图片描述
配置

## maven
clean install -pl mall-admin -am
${WORKSPACE}/pom.xml

## shell
#!/usr/bin/env bash
app_name='mall-admin'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
docker run -p 8080:8080 --name ${app_name} \
--link mysql:db \
--link redis:redis \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/var/logs \
-d mall/${app_name}:1.0-SNAPSHOT
echo '----start container----'

打包 mall-admin 模块,并自动打包依赖的模块
clean install -pl mall-admin -am

mall-portal 打包
## maven
clean install -pl mall-portal  -am
${WORKSPACE}/pom.xml

## shell
#!/usr/bin/env bash
app_name='mall-portal'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
docker run -p 8085:8085 --name ${app_name} \
--link mysql:db \
--link redis:redis \
--link mongo:mongo \
--link rabbitmq:rabbit \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/var/logs \
-d mall/${app_name}:1.0-SNAPSHOT
echo '----start container----'
mall-search 打包
## maven
clean install -pl mall-search  -am
${WORKSPACE}/pom.xml

## shell
#!/usr/bin/env bash
app_name='mall-search'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
docker run -p 8081:8081 --name ${app_name} \
--link mysql:db \
--link elasticsearch:es \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/var/logs \
-d mall/${app_name}:1.0-SNAPSHOT
echo '----start container----'
DockerFile
  • 环境变量被以下列表的Dockerfile指令支持:
    ADD
    COPY
    ENV
    EXPOSE
    FROM
    LABEL
    STOPSIGNAL
    USER
    VOLUME
    WORKDIR
    还包括:
    ONBUILD (当跟上面支持的指令中一个组合时)

    Dockerfile文件万字全面解析

  • CMD和ENTRYPOINT如何相互作用
    CMD 和 ENTRYPOINT 指令都定义了在运行容器时执行的命令。 很少有规则描述他们的合作。

    1. Dockerfile 应至少指定一个 CMD 或 ENTRYPOINT 命令。
    2. 使用容器作为可执行文件时,应定义 ENTRYPOINT。
    3. CMD 应该用作为 ENTRYPOINT 命令定义默认参数或在容器中执行 ad-hoc 命令的方法。
    4. 使用备用参数运行容器时,将覆盖 CMD。

    下表显示了针对不同 ENTRYPOINT/CMD 组合执行的命令:
    在这里插入图片描述

  • CMD
    功能为容器启动时要运行的命令
    语法有三种写法

  1. CMD [“executable”,“param1”,“param2”] (exec模式)推荐
  2. CMD [“param1”,“param2”] 提供给ENTRYPOINT的默认参数
  3. CMD command param1 param2 (shell模式,shell模式会自动在你提供的命令前面添加一个/bin/bash -c命令)

    注意: 比如我们自定义了ENV name=lisa
    使用shell模式的话,可以输出$namelisa
    但是exec 模式的话是不能正常输出$namd
    如果想用exec 模式获取ENV变量的话,可以用折中方法,就是编写脚本,然后使用脚本去获取变量输出,CMD指令执行脚本,脚本一定加可执行权限比如 CMD["/root/test.sh"]
    test.sh内容为
    #!/bin/bash
    echo $name

  • ENTRYPOINT 指令
    ENTRYPOINT 指令:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程
    但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序

  • NTRYPOINT 与 CMD 区别
    如:

FROM ubuntu:14.10  
ENTRYPOINT ["top", "-b"]   
CMD ["-c"]  

把可能需要变动的参数写到 CMD 里面。然后你可以在 docker run 里指定参数
这样 CMD 里的参数(这里是-c) 就会被覆盖掉而 ENTRYPOINT 里的不被覆盖。
注意:
ENTRYPOINT有两种写法,第二种(shell form)会屏蔽掉 docker run 时后面加的命令和 CMD 里的参数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jenkins 是一个开源的持续集成工具,可以帮助开发团队自动化构建、测试和部署代码。在使用 Jenkins 进行多模块打包时,我们可以按照以下步骤进行操作: 1. 创建 Jenkins 任务:在 Jenkins 控制台中创建一个新的任务,选择“自由风格项目”模板。 2. 配置源代码管理:在“配置”选项卡中,选择代码托管平台(如 Git、SVN 等)并提供项目的代码仓库地址。 3. 设置构建触发器:在“配置”选项卡中,选择适当的构建触发器,如定期构建或者代码提交时触发构建。 4. 配置构建步骤:点击“增加构建步骤”按钮,选择“Invoke Maven”或“Execute Shell”等步骤,用于执行打包命令。对于多模块打包,我们可以使用 Maven 的“mvn clean package”命令。 5. 配置构建后操作:在“配置”选项卡中,选择适当的构建后操作,如构建报告的生成、邮件通知或者构建结果的存档等。 6. 保存并触发构建:点击保存按钮保存任务配置,并手动触发第一次构建。 Jenkins 将按照配置的步骤执行构建过程,下载源代码,执行打包命令并生成构建结果。多模块打包意味着 Jenkins 将同时打包并处理多个子模块,可以通过 Maven 的继承机制和模块引用来实现。在设置构建步骤时,我们可以在 Maven 命令中指定需要打包的子模块,以及构建结果的输出路径。 总结:使用 Jenkins 进行多模块打包的关键是正确配置构建步骤,包括选择适当的构建步骤类型和提供正确的构建命令参数。这将确保 Jenkins 能够自动化执行多模块打包,并生成正确的构建结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值