Jenkins+Docker+Git实现自动化部署

安装Git

yum update
yum install -y git

git生成SSH Key

[root@iZwz925p95hhdeZ Document]# git config --global user.name "zzt"
[root@iZwz925p95hhdeZ Document]# git config --global user.email "xxxxxx@qq.com"
[root@iZwz925p95hhdeZ Document]# ssh-keygen -t rsa -C "xxxxxx@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:BzQkCx5nZTBY4JrjXQ9hPtEDbTYLR/XXTCK8ZoKOAnE xxxxxx@qq.com
The key's randomart image is:
+---[RSA 3072]----+
|    o+OOB.... . .|
|  ..E==*O. ... = |
|   =.+.B.=  ... o|
|  =   = o.. +.   |
| . + . *S .+     |
|  . o . o.       |
|     .           |
|                 |
|                 |
+----[SHA256]-----+
[root@iZwz925p95hhdeZ secrets]# cd /root/.ssh
[root@iZwz925p95hhdeZ .ssh]# ll
total 8
-rw------- 1 root root    0 Jun 28 13:44 authorized_keys
-rw------- 1 root root 2602 Aug  3 14:45 id_rsa
-rw-r--r-- 1 root root  570 Aug  3 14:45 id_rsa.pub
#id_rsa里存的是私钥,id_rsa.pub里存的是公钥

将公钥添加到github项目里。私钥添加到Jenkins配置中,后面会讲到。
路径:setting->SSH and GPG keys->New SSH key

安装Jenkins

这里使用Docker来安装Jenkins,也可以直接安装到Linux中。
注意拉取jenkins/jenkins镜像而不是jenkins,Jenkins官方最新镜像现在已改为jenkins/jenkins的了

docker pull jenkins/jenkins:lts

创建Jenkins工作目录和配置访问权限

mkdir /usr/local/jenkins
chown 777 /usr/local/Jenkins
chown 777 /var/run/docker.sock

运行Jenkins

docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true  -v /usr/local/jenkins:/var/jenkins_home -v /usr/bin/docker:/bin/docker  -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts
#参数说明
参数解释:
#-p 8080:8080 -p 50000:50000 --映射jenkins端口
#--name jenkins --容器名称自己命名
#privileged=true --授予容器管理员权限
#-v /usr/local/jenkins:/var/jenkins_home --映射jenkins目录
#-v /usr/bin/docker:/bin/docker --映射docke目录 到时候需要在容器里执行docker命令
#-v /var/run/docker.sock:/var/run/docker.sock --映射docker执行命令 到时候需要容器里执行docker命令
#运行后用docker ps查看是否正常运行

运行起来后在浏览器直接输入IP:8080即可访问Jenkins

配置Jenkins

首次登录需要密码。
在这里插入图片描述
密码存放路径图中有提示,但由于我们是用Docker安装的,所以我们的密码存放在映射的目录下。
在这里插入图片描述

插件安装

登录进去以后这里默认选择推荐的插件。安装完全后有可能会有一些安装失败的,直接选择跳过,然后根据提示创建用户,不创建下次登录还是用之前的密码。进入主界面->系统管理->插件管理->高级->升级站点,将https改为http,完成后重启Jenkins再在可选插件里面搜索想要的插件安装。Git plugin需要安装,其他的看情况。
在这里插入图片描述

修改时区

将Jenkins时区设置为北京时间
打开Jenkins主页 ->【系统管理】->【脚本命令行】运行下面的命令

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

新建任务

在这里插入图片描述
源码管理选择Git
在这里插入图片描述
将Git的私钥填入凭据中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
脚步如下:

#!/bin/bash
# 获取版本号
Githash=`git rev-parse --short HEAD`
docker stop demo
docker rm demo
echo --------------Building Docker Image-------------
echo $Githash
docker build -t demo:$Githash .
docker tag demo:$Githash demo:latest
echo --------------Launching Container---------------
docker run --name demo -d -p 80:80 demo:latest

设置完成后点击保存就完成了新建任务。

构建项目

点击立即构建,蓝色代表成功,失败可以查看控制台输出查看原因。
在这里插入图片描述
在这里插入图片描述
构建成功后可以在docker容器中查看是否已经运行。
在这里插入图片描述

踩坑系列

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock:
在这里插入图片描述
解决方案:
查看docker.sock是否具有访问权限,没有则添加访问权限。

ERROR: Timeout after 10 minutes
在这里插入图片描述
解决方案:
1.提高网络带宽。
2.设置浅克隆。
3.Dockerfire配置有需要依赖镜像的可以先提前在docker中拉取下来。

ERROR: Error cloning remote repo ‘origin’
在这里插入图片描述
解决方案:
1.检查git是否有拉取项目的权限。
2.检查项目地址是否正确。

dockerfile 中执行过慢导致超时
解决方案:
Dockerfire配置有需要依赖镜像的可以先提前在docker中拉取下来,例如“FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base”执行太慢,则在docker中直接拉取,有可能docker拉取也会很慢,这时需要使用国内镜像去拉取,详情参考:https://github.com/newbe36524/Newbe.McrMirror

dockerfile内容

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["WebAPI/WebAPI.csproj", "WebAPI/"]
COPY ["Common/Common.csproj", "Common/"]
RUN dotnet restore "WebAPI/WebAPI.csproj"
COPY . .
WORKDIR "/src/WebAPI"
RUN dotnet build "WebAPI.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebAPI.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebAPI.dll"]
posted @ 2020-08-04 17:18  漂移青春  阅读(524)  评论(0编辑  收藏  举报