文章目录
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期-孙克旭」一起进行文档协作