概述
本篇主要为个人在jenkins持续集成中遇到的坑点。不会特别详细的叙述整个CI/CD流程
容器化Jenkins没有JDK
不知道是不是自己下的镜像版本的问题,jenkins容器起起来以后没有jdk运行环境。
- 使用docker 挂载数据卷的方式蹭宿主机的jdk来用,见下面的一长串启动命令配置
个人不是很熟悉 docker-compose,所以本篇基本都是docker 原生命令
docker run -d -it --name my_jenkins -p 8000:8080 -p 50000:50000 -v ${JAVA_HOME}:/usr/local/jdk cijenkins
# -it 交互式运行
# -v 挂载数据卷 宿主机:容器内目录
如果跑ci/cd任务中jenkins的任务日志依然提示 java command not found啥的,那还是没找到jdk
这个问题当时让我挺头大的,列一下我尝试过的方法
数据卷挂载
docker run -d -it --name my_jenkins -p 8000:8080 -p 50000:50000 -v ${JAVA_HOME}:/usr/local/jdk -v ${MAVEN_HOME}:/usr/local/maven -v
容器内设置环境变量
- 这个自己进入容器设置,没有截图。
- jenkins 页面上设置全局变量,最终是这个生效了,列出来全部是想着有可能有同学跟我情况不同。
- jenkins - 系统配置 - 全局属性,键值对搞起,上面设置过的属性在下面可以${变量名}复用
-
容器化Jenkins没有Git
设置一下自己让jenkins自己安装即可
- jenkins 全局工具配置
-
容器化Jenkins无法执行Docker命令坑点
解题思路
- 容器卷挂载
docker run -d -it --name my_jenkins -p 8000:8080 -p 50000:50000 -v ${JAVA_HOME}:/usr/local/jdk -v ${MAVEN_HOME}:/usr/local/maven -v /opt/myjenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker cijenkins
- 容器卷挂载
挂载之后仍无法解决的时候,因为dokcer容器内执行docker命令是用的宿主机的docker,宿主机的docker用户群里没有容器内的用户,所以无法执行,最终使用下面这句代码解决问题
-v /var/run/docker.sock:/var/run/docker.sock
项目目录下Dockfile命名坑点
保持在target同级目录下,且不能乱命名,否则在jenkins哪里编写pipline 的时候需要 build -f 指明,给自己徒增烦恼。贴一下自己的工程目录
-
Docker build 镜像时命名坑点
```shell
stage('构建镜像'){
steps {
echo "start build image"
echo "-----当前地址 ----"
//dir('demo') {
// build镜像
//sh 'docker build -f Dockerfile -t addicated/adiblog:1.0 .'
sh 'docker build -t addicated/adiblog:1.0 .'
// 登录镜像仓库
//sh 'docker login -u addicated -p 1981925d7'
sh 'docker login -u cn-east-3@KIUXSRDS4MPONUMUG9Q2 -p 2e28420f0982d067e79b1e87b534bd2989c5504f27c2b5cf2f40dad61c01bc64 swr.cn-east-3.myhuaweicloud.com'
// 推送镜像到镜像仓库
//sh 'docker push addicated/adiblog:1.0'
sh 'docker tag addicated/adiblog:1.0 swr.cn-east-3.myhuaweicloud.com/addicated/adiblog:1.0'
//sh 'docker tag adiblog:1.0'
sh 'docker push swr.cn-east-3.myhuaweicloud.com/addicated/adiblog:1.0'
//}
}
}
- docker build -t dockerhub的用户名/镜像名字:镜像tag(版本)
<a name="kqJwR"></a>
# Docker build 后 push 前 对tag进行规范化的坑点
- 这一步没好好做的话会在build的时候被卡住,因为我用的是华为的容器镜像服务。所以按照华为的容器镜像来记述。至于为什么用华为的容器镜像服务,md,还不是因为dockerhub太鸡儿卡,build总不成功。
- ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1608527/1607683111109-c58d32b3-1ba7-4429-b067-71d7b6fca773.png#align=left&display=inline&height=409&margin=%5Bobject%20Object%5D&name=image.png&originHeight=818&originWidth=2802&size=441180&status=done&style=none&width=1401)
- ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1608527/1607683132872-daecadd0-69a5-47fc-908e-d87ec3acd4be.png#align=left&display=inline&height=483&margin=%5Bobject%20Object%5D&name=image.png&originHeight=966&originWidth=1428&size=371418&status=done&style=none&width=714)
- 先登陆,再进行上传,比较简单,没有什么好记述的,重点是下面的上传镜像两步,不得不说这个指引不合格。。
```shell
sh 'docker tag addicated/adiblog:1.0 swr.cn-east-3.xxxxaddicated/adiblog:1.0'
# tag 后面不要像指引那样用[]之类的玩意,只会失败
sh 'docker push swr.cn-east-3.myhuaweicloud.com/addicated/adiblog:1.0'
# 同样,上传的命令也没有{}
Docker push 到Dockerhub 失败与替代方案
这个在上一个标题说了,参考使用免费的容器镜像服务,华为云或者其他。
项目部署后连接 DB mysql失败爬坑-docker内容器互联
项目部署之后发现项目无法链接到mysql,我的mysql也是docker起的容器。
- 尝试过使用link进行链接,但失败。
[root@VM-0-10-centos ~]# docker run -d -p 3306:3306 —name mysql —network my_net -e MYSQL_ROOT_PASSWORD=”123456” mysql:5.7
build镜像部分
sh ‘docker run -d -p 8081:8081 —network my_net —name=AdiBlog addicated/adiblog:1.0’