Docker+Jenkins实现自动化部署

Docker+Jenkins实现自动化部署.docx

 

一、          安装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

例如http://服务器IP:8080    

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

注意下面的mytestmvcmyweb-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

 

posted @ 2021-04-15 20:16  末日里的一抹阳光  阅读(859)  评论(0编辑  收藏  举报