Docker+Jenkins实现自动化部署
一、 安装Docker
1.安装所需的软件包 (其实这些腾讯云都具备了,只不过怕有些阉割版的系统缺少,所以贴上命令,安装过的使用该命令不会造成伤害)
# sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
2.使用稳定版的仓库(当然可以使用最新版或测试版的仓库,这个需要官方的说明)
# sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
3.安装Docker ce
# sudo yum install docker-ce
tips:在生产系统上,您应该安装特定版本的Docker CE,而不是始终使用最新版本。
4.启动Docker
# sudo systemctl start docker
5. 重启docker
# sudo service docker restart
二、安装Jenkins
jenkins镜像,默认也是latest一般意味着最后最新版本。很多官方最新镜像也都是如此命名;直到后来安装配置完成后,登录进去提示我不是最新版本,并且很多插件已经不支持此版本了,Jenkins官方最新镜像现在已改为jenkins/jenkins的了。 所以最新版是:jenkins/jenkins
1. 拉取镜像Jenkins
docker pull jenkins/jenkins:lts
2. 创建jenkins文件夹
mkdir -p /home/var/jenkins
3. 设置目录权限
3.1设置jenkins文件夹归属用户UID为1000
chown -R 1000 /home/var/jenkins
3.2运行Jenkins
注意后面的镜像名称和版本lts
docker run --name myjenkins -d -p 8080:8080 -p 50000:50000 -v /home/var/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker --env JAVA_OPTS="-Duser.timezone=GMT+08" jenkins/jenkins:lts
//参数解释:
- name 容器名称
-p 8080:8080 -p 50000:50000 --映射jenkins端口
-v /<your path>:/var/jenkins_home 将容器的目录挂载到宿主机的目录下,这样防止容器崩掉后数据都丢失的情况
-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker
--env JAVA_OPTS="-Duser.timezone=GMT+08" 解决jenkins时间显示和本地时间不一致的问题
4. 启动Jenkins
PS:myjenkins为刚刚设置的容器名称
docker start myjenkins
5. 检查容器运行状况
docker ps
三、配置Jenkins
1. 访问Jenkins
查看容器启动成功后,我们可以通过地址+端口访问刚刚运行的Jenkins
2. 查看密码文件
提示首次访问需要密码,我们通过刚刚映射的Jenkins目录里查看这个默认密码。
默认密码路径:/home/var/jenkins/secrets/ (注意前面usr/local/jenkins路径就是刚刚自己映射的目录)
cat /home/var/jenkins/secrets/initialAdminPassword
3. 安装插件
登录进去以后默认选择推荐的插件。接下来就是等待安装
四、.NetCore项目设置
1. 创建项目
这里我们创建一个新的.net core项目,创建项目的时候可以选择启用Docker支持。
2. Dockerfile始终复制
本地发布验证程序是否运行正常,并且Dockerfile属性要设置为 始终复制
3. 发布相关配置
一般情况使用独立部署模式,独立部署微软做了压缩性能优化,需要安装SDK
ps:默认启动端口是5000,可以修改appsetting.json文件,添加urls节点指定启动端口
这里由于我的服务器5000已经有了Jenkins,所以改成8088
五、JenKins任务
1. 创建任务
在Jenkins里面创建自由风格任务
2. 设置WebHook
Domain 选择 全局凭据
Kind 选择 Gitee API 令牌
Scope 选择你需要的范围
Gitee API Token 输入你的码云私人令牌,获取地址:https://gitee.com/profile/personal_access_tokens
ID, Descripiton 中输入你想要的 ID 和描述即可。
3. 设置git地址和构建环境
我这里是Gitee项目
3.1、设置代码仓库地址并配置凭据
3.2 配置构建环境
3.3 构建触发器(需要下载gitee插件才有该选项)
3.4 生成Gitee WebHook 密码
3.5前往gitee 配置WebHook 并将Jenkins生成的密码填写进去。
3.6 配置构建脚本
4. 设置构建shell
注意下面的mytestmvc 和myweb-test改为自己的容器名称和对应镜像名称即可。
#!/bin/bash echo --------------- Docker Container ID ------------------ docker stop `docker ps -a| grep mytestmvc | awk '{print $1}' ` docker rm `docker ps -a| grep mytestmvc | awk '{print $1}' ` echo --------------- Docker Images ID ------------------ docker image rm `docker images -q --filter reference=myweb-test:latest` echo --------------- Docker Images ------------------ docker build -t myweb-test . echo --------------- Docker Container ------------------ docker run -d -p 8088:8088 --name mytestmvc myweb-test:latest |
5. 提交代码测试构建
提交代码并推送
自动构建中
构建坑点:
1、docker 下jenkens 打包出现Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
解决方案:
# 进入Jenkins容器内(5c8 为容器id)
docker exec -it -u root 5c8 bash
# 修改docker权限
chmod 777 /var/run/docker.sock
2、COPY failed: stat /var/lib/docker/tmp/docker-builder893785636/WebApplication1/WebApplication1.csproj: no such file or directory
解决方案:
修改shell buid脚本:docker build -t mywebapp1 -f ./WebApplication1/Dockerfile .
六. 参考文章
1. Docker升级
https://blog.csdn.net/qq_39629343/article/details/80168084
2. Docker升级后容器错误
https://blog.csdn.net/bacteriumx/article/details/87611334
3 Jenkins执行Docker命令无权限问题
https://www.cnblogs.com/printertool/p/12972908.html
4、解决使用默认dockefile进行构建no such file or directory
https://www.cnblogs.com/xhznl/archive/2020/06/09/13081708.html