day071-Jenkins通过docker部署代码-java和前端代码

0. 老男孩思想-追女生/找工作就相当于把自己卖出去

每个人都应该掌握销售能力,绝不仅仅是销售人员才需要。

找工作面试、找对象、和客户谈合作实际上都是销售。

运维、开发人员同样需要销售能力才能获取高薪。

1. Jenkins部署代码流程-docker

在这里插入图片描述

1. 开发书写代码,提交代码仓库中
2. jenkins运行
a) 拉取代码(tag)
b) 进行打包(tar,mvn,npm) -->war/jar/tar
c) Dockerfile 自定义镜像代码包放入到镜像 (docker build) ngx镜像/tomcat/jdk/
d) 自定义镜像,上传到镜像仓库(registary/harbor/公有云ACR/dockerhub)
docker login -u -p xxx ;docker tag;docker push
e) web节点:先删除旧的容器,通过新的镜像启动新的容器(docker run).
3. 测试与调试

2. 部署docker并开启Docker API端口

  • 部署好docker后修改docker的system文件:/usr/lib/systemd/system/docker.service
# 启动docker时开启2375端口
ExecStart=/usr/bin/dockerd  -H 172.16.1.72:2375 -H unix:///var/run/docker.sock
……
systemctl daemon-reload 
systemctl restart docker.service 
  • 准备好docker镜像仓库-harbor,和docker01、docker02作为代web服务器
  • 配置harbor仓库的hosts解析

在这里插入图片描述

3. Jenkins添加docker插件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4. 创建Jenkins-java任务

4.1 构建镜像参数信息

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.2 编写Dockerfile并上传到仓库

  • Dockerfile文件:
[root@devops-jenkins /app/code/hello_world]# cat Dockerfile 
FROM tomcat:9.0-jdk8
LABEL author=lidao996  desc="自定义war包镜像-hello业务"

ARG CODE_VERSION
ENV CODE_VERSION=${CODE_VERSION:-1.0.0}


ADD ./target/hello-world-war-${CODE_VERSION}.war   /usr/local/tomcat/webapps/ROOT.war

EXPOSE 8080

CMD ["catalina.sh","run"]
  • 上传文件
git add .
git commit -m "Dockerfile文件"
git push origin --all

在这里插入图片描述

4.3 web节点拉取镜像并启动容器

4.3.1 Jenkins节点配置web节点的hosts和密钥认证

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.3.2 Jenkins部署容器脚本

在这里插入图片描述

echo 后续操作....
ip_list=10.0.0.10
for ip in $ip_list
do
    #1.获取被管理机器上 容器数量
    cnt=`ssh root@$ip docker ps -f "name=hello_*" -q |wc -l`
    ssh root@$ip  <<EOF
                     #2.判断
                    if [ $cnt -gt 0 ];then
                       docker ps -f "name=hello_*" -q |xargs docker rm -f
                    fi
                    docker run -d  --name hello_v1.0.0  -p 8080:8080  --restart always  harbor.520skx.com/oldboy/hello:v1.0.0
EOF
done

echo "#####4.通知#####"

4.3.3 运行任务

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.4 添加Jenkins参数

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 运行

在这里插入图片描述

在这里插入图片描述

5. 创建部署前端任务

5.1 编写Dockerfile文件

[root@devops-jenkins /app/code/china/china-ex-main]# cat Dockerfile 
FROM nginx:1.24-alpine
LABEL author=oldboylidao996

WORKDIR /usr/share/nginx/html/

ADD dist/* .

EXPOSE 80

CMD ["nginx","-g","daemon off;"]
  • 上传文件
[root@devops-jenkins /app/code/china/china-ex-main]# git add .
[root@devops-jenkins /app/code/china/china-ex-main]# git commit -m "v2.1"
……
[root@devops-jenkins /app/code/china/china-ex-main]# git tag -a "v2.1" -m "v2.1"
[root@devops-jenkins /app/code/china/china-ex-main]# git push origin master 
……
[root@devops-jenkins /app/code/china/china-ex-main]# git push --tags
……

5.2 任务配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

# 编译
export PATH=/app/tools/node/bin:/app/tools/maven/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
npm install
npm run build

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

# web节点-docker1
ip_list="10.0.0.10 "
for ip in $ip_list
do
    #1.获取被管理机器上 容器数量
    cnt=`ssh root@$ip docker ps -f "name=china*" -q |wc -l`
    ssh root@$ip  <<EOF
                     #2.判断
                    if [ $cnt -gt 0 ];then
                       docker ps -f "name=china*" -q |xargs docker rm -f
                    fi
                    docker run -d  --name china_${TAG_NAME}  -p 80:80  --restart always  harbor.520skx.com/oldboy/china:${TAG_NAME}
EOF
done

5.3 运行任务

在这里插入图片描述

在这里插入图片描述

6. 踩坑记录

6.1 Could not build image: When using ADD with more than one source file, the destination must be a directory and end with a /

  • 编译Dockerfile时报错

在这里插入图片描述

当使用通配符 *复制多个文件时:

  • ADD dist/* .中的目标路径 .(当前目录) 缺少斜杠结尾
  • Docker 无法区分你是想复制到目录还是单个文件
  • 在目标路径末尾添加斜杠 /

7. 思维导图

https://kdocs.cn/join/gpuxq6r?f=101\r\n邀请你加入共享群「老男孩教育Linux运维99期-孙克旭」一起进行文档协作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙克旭​‌​

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值