• jenkins 共用宿主机中的docker自动化部署


    目录

    第一节 jenkins 共用宿主机中的docker自动化部署

    1.docker命令安装启动jenkins

    2.查询jenkins内是否可以执行宿主机中的docker

    第二节.jenkins 配置自动化部署

    1.界面配置

    1.配置mave

    2.配置gitee

    第三节 创建springboot多模块项目

     1.相关配置

    1.pom

     2.编写dockerfile文件

    3.项目上传到gitee

    第四节 jenkins部署项目相关配置

    第五节 测试启动

    1.项目发布构建

    2.查看宿主机进程

    3.查看jenkins容器进程

     


    第一节 jenkins 共用宿主机中的docker自动化部署

    1.docker命令安装启动jenkins

    1. mkdir 挂载文件
    2. ##############################################################################################################################
    3. ##
    4. cd Users/jiajie/soft
    5. mkdir jenkins
    6. ## 上传maven文件到 jenkins 目录下
    7. ##
    8. 宿主机安装的docker.sock文件
    9. var/run/docker.sock
    10. ##############################################################################################################################
    11. 启动命令
    12. ##############################################################################################################################
    13. docker run -u root -m 1024m --name jenkins
    14. -p 9998:8080 -p 50000:50000 --privileged
    15. -v /var/run/docker.sock:/var/run/docker.sock
    16. -v $(which docker):/bin/docker
    17. -v /Users/jiajie/soft/jenkins:/var/jenkins_home
    18. -d jenkins/jenkins:lts
    19. #以root用户运行---否则会报无权限
    20. 参数说明:
    21. (1) -v /var/run/docker.sock:/var/run/docker.sock:容器中的进程通过它与Docker守护进程进行通信
    22. (2) -v /usr/bin/docker:/usr/bin/docker:将宿主机的docker命令挂载到容器中。
    23. /usr/bin.docker为docker命令所在具体位置,可以通过which docker指令获取。或者挂载时使用-v $(which docker):/usr/bin/docker
    24. (3) -v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7:ibltdl.so.7是Docker命令执行所依赖的函数库,容器中library的默认目录是/usr/lib/x86_64-linux-gnu/,把宿主机的libltdl.so.7函数库挂载到该目录即可。
    25. 可以通过whereis libltdl.so.7命令查看具体位置
    26. centos7中该文件路径为/usr/lib64/libltdl.so.7
    27. ubuntu中该文件路径为/usr/lib/x86_64-linux-gnu/libltdl.so.7

     

    2.查询jenkins内是否可以执行宿主机中的docker

     

    1. 进入容器 docker exec -it bae630c41276 /bin/bash
    2. 执行 docker ps
    3. 正常使用 宿主机docker

     

    第二节.jenkins 配置自动化部署

    1.界面配置

    1. 访问
    2. http://localhost:9998/login?from=%2F

    1. #查看密码
    2. 宿主机挂载目录下 /Users/jiajie/soft/jenkins/secrets/initialAdminPassword
    3. 也可以在/var/jenkins_home/secrets/initialAdminPassword这个文件中查看到管理员密码

     

     

     

     

     

    1.配置mave

    1. M2_HOME
    2. /var/jenkins_home/apache-maven-3.6.1
    3. PATH+EXTRA
    4. $M2_HOME/bin

     

    2.配置gitee

     

     

     

     

     

     

    第三节 创建springboot多模块项目

     1.相关配置

    1.pom

    1. ##### 需要加上 spring-boot-maven-plugin
    2. ########否则打包会报 no main manifest attribute, in app.jar
    3. <build>
    4. <finalName>micro-gateway</finalName>
    5. <plugins>
    6. <plugin>
    7. <groupId>org.springframework.boot</groupId>
    8. <artifactId>spring-boot-maven-plugin</artifactId>
    9. <!--加入下面两项配置-->
    10. <executions>
    11. <execution>
    12. <goals>
    13. <goal>repackage</goal>
    14. </goals>
    15. </execution>
    16. </executions>
    17. <configuration>
    18. <includeSystemScope>true</includeSystemScope>
    19. <mainClass>com.micro.microgateway.MicroGatewayApplication</mainClass>
    20. </configuration>
    21. </plugin>
    22. <plugin>
    23. <groupId>org.apache.maven.plugins</groupId>
    24. <artifactId>maven-surefire-plugin</artifactId>
    25. <configuration>
    26. <testFailureIgnore>true</testFailureIgnore>
    27. </configuration>
    28. </plugin>
    29. </plugins>
    30. </build>

     2.编写dockerfile文件

    1. FROM openjdk:8-jdk-alpine
    2. MAINTAINER heshuai <2460983732@qq.com.com>
    3. ##镜像源
    4. RUN echo "http://mirrors.aliyun.com/alpine/v3.6/main" > /etc/apk/repositories \
    5. && echo "http://mirrors.aliyun.com/alpine/v3.6/community" >> /etc/apk/repositories \
    6. && apk update upgrade \
    7. && apk add --no-cache openssh vim \
    8. && apk add --no-cache procps unzip curl bash tzdata \
    9. && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    10. && echo "Asia/Shanghai" > /etc/timezone
    11. RUN mkdir /data
    12. RUN mkdir /micro-gateway
    13. RUN mkdir /data/log
    14. WORKDIR /micro-gateway
    15. COPY target/micro-gateway.jar /micro-gateway
    16. ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /micro-gateway/micro-gateway.jar"]
    17. EXPOSE 9000

    3.项目上传到gitee

    1. ###相关命令
    2. 上传项目
    3. 第一步:建立本地git仓库
    4. cd 到你的本地项目根目录下,执行git命令
    5. git init
    6. 第二步:将本地项目工作区的所有文件添加到暂存区
    7. git add . // . 表示所有文件, 如果想添加项目中的指定文件,那就把 . 改为指定文件名即可
    8. 第三步:将暂存区的文件提交到本地仓库
    9. git commit -m "" //冒号里面写注释语句 eg:git commit -m "init project"
    10. 第四步:在码云上创建自己的项目,创建如图所示
    11. 创建仓库 https://gitee.com/wondersgroups/little-sweet-sister.git--仓库地址
    12. 第五步:将本地仓库关联到码云上
    13. git remote add origin https://gitee.com/wondersgroups/little-sweet-sister.git
    14. 注意:在这一步时如果出现错误:fatal:remote origin already exists 意思是路径存在了,就需要删除原来的路径从新添加
    15. git remote rm origin
    16. 第六步:最后一步,将代码由本地仓库上传到Github远程仓库
    17. git push -u origin master 指定分支 master
    18. git push -u origin +master 强制上传
    19. 注意:如果报failed to push some refs to git 错误出现错误的主要原因是码云中的README.md文件不在本地代码目录
    20. 可以通过如下命令进行代码合并【注:pull=fetch+merge]
    21. git pull --rebase origin master
    22. 执行上面代码后可以看到本地代码库中多了README.md文件
    23. 此时再执行语句 git push -u origin master即可完成代码上传到github
    24. 执行完之后如果无错误就上传成功了!
    25. 需要提示的是这里的master是Github默认的分支,如果你本地的当前分支不是master,就用git checkout master命令切换到master分支,
    26. 如果你想用本地当前分支上传代码,则把第六步的命令里的master切换成你的当前分支名即可。
    27. 如果最后再出现错误,就执行下面代码:
    28. git push -u origin master -f 强制命令会覆盖别人分支,慎用

     

    第四节 jenkins部署项目相关配置

     

     

     

     

    1. ##############################################################################################################################
    2. ###构建命令
    3. ##############################################################################################################################
    4. echo $JAVA_HOME
    5. echo "=============java变量路径:$JAVA_HOME"
    6. PROJECT_LOCATION=little-sweet-sister
    7. GROUP_ID=com.micro
    8. cd /var/jenkins_home/workspace/${PROJECT_LOCATION}/${PROJECT} && /var/jenkins_home/apache-maven-3.6.1/bin/mvn clean install -am -pl ${GROUP_ID}:${PROJECT} -Dmaven.test.skip=true
    9. #cd $PROJECT_LOCATION && /var/jenkins_home/apache-maven-3.6.1/bin/mvn clean install -am -pl ${GROUP_ID}:${PROJECT} -Dmaven.test.skip=true
    10. TAG=`date "+%Y%m%d"`
    11. IMAGE_NAME=$PROJECT
    12. echo "=============查看进程id,然后删除"
    13. #容器id
    14. cid=$(docker ps -a | grep $IMAGE_NAME | awk '{print $1}')
    15. #镜像id
    16. iid=$(docker images | grep $IMAGE_NAME | awk '{print $3}')
    17. if [ -n "$cid" ]; then
    18. echo "存在容器$IMAGE_NAME,cid=$cid,删除容器。。。"
    19. docker rm -f $cid
    20. else
    21. echo "不存在$IMAGE_NAME容器"
    22. fi
    23. if [ -n "$iid" ]; then
    24. echo "存在镜像$IMAGE_NAME,iid=$iid,删除容器镜像。。。"
    25. #docker rmi -f $iid
    26. else
    27. echo "不存在$IMAGE_NAME镜像"
    28. fi
    29. #####
    30. case $PROJECT in
    31. "micro-gateway")
    32. cd /var/jenkins_home/workspace/${PROJECT_LOCATION}/micro-gateway;;
    33. "micro-pay")
    34. cd micro-pay;;
    35. "micro-base")
    36. cd micro-base;;
    37. *)
    38. echo "error"
    39. ;;
    40. esac
    41. ### 构建容器
    42. docker build -t $IMAGE_NAME .
    43. echo "=============开始构建镜像$IMAGE_NAME"
    44. echo "当前docker 所有镜像:"
    45. docker images
    46. echo "启动容器------->"
    47. case $PROJECT in
    48. "micro-gateway")
    49. docker run -p 9000:9000 -d --restart=always -e JAVA_OPTS='-Xmx500m -Xms300m -Dspring.profiles.active=test' -v /Users/jiajie/soft/logs/micro-gateway:/data/log --name $IMAGE_NAME $IMAGE_NAME
    50. ;;
    51. "micro-pay")
    52. docker run -p 8082:8082 -d --restart=always -e JAVA_OPTS='-Xmx500m -Xms300m -Dspring.profiles.active=test' -v /Users/jiajie/soft/logs/micro-pay:/data/log --name $IMAGE_NAME $IMAGE_NAME
    53. ;;
    54. *)
    55. echo "error"
    56. ;;
    57. esac
    58. echo "启动服务成功"
    59. echo "查看启动的所有进程:"
    60. docker ps

     

    第五节 测试启动

    1.项目发布构建

     

     

    2.查看宿主机进程

    1. #查看宿主机进程
    2. docker ps

     

    3.查看jenkins容器进程

     

    1. #查看jenkins容器进程
    2. docker exec -it bae630c41276 /bin/bash
    3. docker ps

     

     

     

  • 相关阅读:
    LeetCode的使用方法
    Java基础—重新抛出异常
    2.13每日一题(根号下的定积分及去绝对值的定积分)
    Nginx基础篇-Nginx的WEB模块~连接状态
    356页14万字高端商业办公综合楼弱电智能化系统2022版
    95年的测试员,什么也不会敢要12K~看着他的简历思绪万千...
    JS上传文件(base64字符串和二进制文件流)
    ArrayList集合2
    Overmind VS Redux
    Vue的模板语法(下)
  • 原文地址:https://blog.csdn.net/qq_31987649/article/details/128021161