经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Docker » 查看文章
使用Jenkins+docker打包部署后端服务的实现
来源:jb51  时间:2022/8/3 10:49:02  对本文有异议

老板给了两台服务器,一台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

以下是我流水线示例:

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

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

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

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

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

启动脚本

  1. ./start.sh

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

到此这篇关于使用Jenkins+docker打包部署后端服务的实现的文章就介绍到这了,更多相关Jenkins docker打包部署内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号