• 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"]
    
  • 相关阅读:
    Ubuntu安装deb软件包错误(依赖关系问题)解决
    scrapy抓取的中文结果乱码解决办法
    删除Git记录里的大文件
    Ubuntu18.04 修改DNS
    linux实现ssh免密码登录
    Vim进阶指南
    查找相同图片并重命名
    Markdown进阶指南
    一眼看穿flatMap和map的区别
    Java8简明指南
  • 原文地址:https://www.cnblogs.com/zt102545/p/13940211.html
Copyright © 2020-2023  润新知