zoukankan      html  css  js  c++  java
  • Jenkins——使用Docker部署Jenkins详解

    前言

    • 系统版本Centos7.8 X64
    • Docker版本18.09+
    • 安装docker-compose
    • RSA格式的ssh密钥对一个,用来拉取gitlab代码和ssh到各个应用服务器上部署,可以使用ssh-keygen -t rsa来生成

    步骤

    Docker安装

    1. 安装Docker服务
    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    
    1. 启动Docker服务
    systemctl start docker
    systemctl enable docker
    
    1. 验证docker是否安装成功
    docker run hello-world
    

    1. 安装Docker-composer服务
    sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
    1. 授予执行权限
    chmod +x /usr/local/bin/docker-compose
    
    1. 验证docker-composer是否安装成功
    docker-compose --version
    

    Jenkins安装

    整体目录结构如下

    app
    └── data
        ├── deploy
        │   └── jenkins
        │       ├── config
        │       ├── docker-composer.yml
        │       └── Dockerfile
        └── jenkins
            ├── certs
            └── data
    

    创建部署目录和数据目录

    # 存放docker-compose相关配置文件
    mkdir -p /app/data/deploy/jenkins 
    # 存放Jenkins证书相关文件
    mkdir -p /app/data/jenkins/certs 
    # 存放Jenkins数据文件
    mkdir -p /app/data/jenkins/data 
    # 修改权限
    cd /app/data
    chmod 775 -R jenkins/
    chown -R 1000:1000 jenkins/
    

    创建相应文件配置

    进入目录

    cd /app/data/deploy/jenkins/
    

    docker-composer.yml

    version: "2"
    services:
      jenkins-blueocean:
        build:
          context: .
        container_name: jenkins-blueocean
        network_mode: bridge
        ports:
          - 8088:8080
          # - 50000:50000
        environment:
        # - DOCKER_HOST=tcp://docker:2376
        # - DOCKER_CERT_PATH=/certs/client
        # - DOCKER_TLS_VERIFY=1
        - TZ=Asia/Shanghai
        - JENKINS_UC="https://mirrors.tuna.tsinghua.edu.cn/jenkins/"
        - JENKINS_UC_DOWNLOAD="https://mirrors.tuna.tsinghua.edu.cn/jenkins/"
        - JENKINS_OPTS="-Dhudson.model.UpdateCenter.updateCenterUrl=https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json"
        volumes:
        - /app/data/jenkins/certs:/certs/client:ro
        - /app/data/jenkins/data:/var/jenkins_home
        depends_on:
        - jenkins-docker
        links:
        - jenkins-docker:docker
      jenkins-docker:
        image: docker:19.03.14-dind
        container_name: jenkins-docker
        privileged: true
        network_mode: bridge
        command: --config-file /etc/docker/daemon.json
        ports:
        - 2376:2376
        environment:
        - DOCKER_TLS_CERTDIR=/certs
        volumes:
        - ./config/daemon.json:/etc/docker/daemon.json:ro
        - /app/data/jenkins/certs:/certs/client
        - /app/data/jenkins/data:/var/jenkins_home
    

    Dockerfile

    FROM jenkins/jenkins:2.263.1-lts-slim
    USER root
    COPY config/sources.list /etc/apt/sources.list
    RUN apt-get update && apt-get install -y apt-transport-https 
           ca-certificates curl gnupg2 
           software-properties-common 
           vim 
           rsync 
           tree 
           default-mysql-client
    RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
    RUN apt-key fingerprint 0EBFCD88
    RUN add-apt-repository 
           "deb [arch=amd64] https://download.docker.com/linux/debian 
           $(lsb_release -cs) stable"
    RUN apt-get update && apt-get install -y docker-ce-cli
    USER jenkins
    # RUN jenkins-plugin-cli --plugins blueocean:1.24.3
    

    config配置

    daemon.json

    请将加速地址替换为自己的阿里云加速地址

    {
      "registry-mirrors": [
        # 阿里云镜像加速地址,请修改为自己的阿里云加速地址
        "https://xxxx.mirror.aliyuncs.com"
      ],
      "log-opts": {
        "max-size": "100m",
        "max-file": "3"
      },
      "live-restore": true
    }
    
    sources.list
    deb http://mirrors.aliyun.com/debian/ buster main non-free contrib
    deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib
    deb http://mirrors.aliyun.com/debian-security buster/updates main
    deb-src http://mirrors.aliyun.com/debian-security buster/updates main
    deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
    deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
    deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
    deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
    

    构建启动Jenkins镜像

    #构建镜像
    docker-compose -f docker-composer.yml build
    
    #启动服务
    docker-compose -f docker-composer.yml up -d
    
    #查看日志获取首次登录密码
    docker logs -f jenkins-blueocean
    

    Jenkins初始化

    Jenkins完全启动时会打印一条Jenkins is fully up and running日志,看到此日志就可以开始配置Jenkins了。

    登录Jenkins

    输入刚才在日志中得到的密码来激活Jenkins

    安装社区推荐插件

    等待插件自动安装完成,若因网络问题安装失败则重试即可



    设置admin账户和密码

    邮箱可以随便填写

    设置Jenkins URL

    URL会被用来做Webhook等用途等地址

    部署完成


    安装Jenkins插件

    Jenkins自动化部署依赖一系列插件的协作,所以我们要提前安装好。

    配置升级站点

    Manage Jenkins->Manage Plugins->高级

    #开源镜像
    https://mirrors.huaweicloud.com/jenkins/updates/update-center.json
    
    #开源地址
    https://jenkins-zh.cn/tutorial/management/plugin/update-center/
    


    配置插件

    可选插件下搜索以下插件并安装

    Blue Ocean (可选,如果想用Blue Ocean视图的话)
    SSH Pipeline Steps
    Pipeline Utility Steps
    NodeJS
    ansiColor
    

    重启Jenkins

    插件安装完成的时候重启Jenkins

    配置maven工具

    安装maven
    # ssh进入Jenkins服务器
    # 进入Jenkins容器
    docker exec -it jenkins-blueocean bash
    # 进入用户主目录,用户主目录中的内容被挂载到数据盘上,可以把安装程序放心放入其中
    cd ~
    mkdir -p tools && cd tools
    # 下载安装包
    curl https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zip -o apache-maven-3.6.3-bin.zip
    # 解压
    unzip apache-maven-3.6.3-bin.zip
    # 删除安装包
    rm apache-maven-3.6.3-bin.zip
    
    # 配置maven settings.xml
    cd ~
    mkdir -p .m2
    # 将项目中maven配置文件settings.xml文件内容写入.m2/settings.xml文件中
    
    配置maven

    在Jenkins Server Web界面上系统管理->全局工具配置->Maven->新增maven安装

    • 名称为M3(名称很重要,我们的流水线配置中需要使用这个名字)
    • 勾选掉自动安装复选框
    • 并设置MAVEN_HOME地址为/var/jenkins_home/tools/apache-maven-3.6.3
    • 点击保存

    配置NodeJS

    上述安装Jenkins插件过程中已经安装了NodeJS插件,因为NodeJS有很多版本,所以我们需要手动配置NodeJS安装,这样才可以在流水线中使用它。
    在Jenkins Server Web界面上系统管理->全局工具配置->NodeJS->新增NodeJS安装

    • 别名设置为NODEJS10(名称很重要,我们的流水线配置中需要使用这个名字)
    • 选择版本NodeJS10.23.0(可以根据需要选择)
    • 点击保存

    配置Jenkins

    配置Jenkins凭据

    Jenkins提供凭据管理的功能来帮助我们存放涉密账号密码、私钥等信息,在配置Pipeline前我们需要创建好相关凭据。

    • 生成ssh密钥对
    # ssh进入Jenkins服务器
    
    # 进入Jenkins容器
    docker exec -it jenkins-blueocean bash
    # 进入主目录
    cd ~
    # 生成RSA密钥对
    ssh-keygen -m PEM -t rsa
    

    在Jenkins界面上系统管理->管理凭据`中创建以下全局ssh密钥对凭据,填写好ID、描述、用户名和私钥信息

    • jenkins-ssh-deploy 用于ssh部署,用户名填写目标运维账号,如root

    • jenkins-ssh-gitlab 用于从gitlab拉代码,用户名填写jenkins

    • gitlab上jenkins用户下添加此ssh key

    为了Jenkins能正常执行部署任务,各个应用服务器运维账号要信任上述生成的密钥对。

    可参考该文章[https://www.cnblogs.com/wangyang0210/p/14361954.html]

    创建共享类库

    Jenkins Pipeline支持共享类库来减少冗余代码,我们通过这种方法来复用代码并且管理部署相关配置。

    系统管理->系统配置->Global Pipeline Libraries中点击新增来创建共享类库,其基本信息如下:

    安全配置

    系统管理->全局安全配置->项目矩阵授权策略

    根据自己需求进行授权就好了

    流水线配置

    创建流水线

    新建任务->输入名称->流水线->确定

    配置流水线

    1. general->丢弃旧的构建

    1. 参数化构建过程->字符参数

    1. 流水线
    @Library('pipeline-deploy-library') _
    
    properties([parameters([string(defaultValue: 'pa-dev', description: '部署代码分支', name: 'git_branch', trim: true)])])
    
    node {
        ansiColor('xterm') {
            deployProject('pa_dev.yml', 'admin-web', params)
        }
    }
    

    流水线需要依赖响应的共享库的,这个是需要开发的,这里就不详说了

    报错

    构建报错

    这里只是做一个记录,上方的步骤均已是修改为正确的步骤。

    ERROR: 
            Can't find a suitable configuration file in this directory or any
            parent. Are you in the right directory?
    
            Supported filenames: docker-compose.yml, docker-compose.yaml
    
    # 解决错误
    1. docker服务没有启动
    2. 使用-f指定配置文件
    

    启动容器报错

    [root@localhost jenkins]# docker logs -f jenkins-blueocean
    touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
    Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
    touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
    Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
    
    # 解决错误
    1. 目录权限错误(chown -R 1000:1000 <本地映射目录>)
    
    学无止境,谦卑而行.
  • 相关阅读:
    算法分析(3)——冒泡排序真的慢吗?
    算法分析(2)——大O和大Θ
    算法分析(1)——数据的影响和函数的增长
    递归的逻辑(5)——米诺斯的迷宫
    递归的逻辑(4)——递归与分形
    李洪强和你一起学习前端之(9)规避脱标,CSS可见性,滑动门案例
    iOS应用管理(优化)
    iOS开发-应用管理
    iOS开发-Tom猫
    iOS 10.3.3 更新背后的故事
  • 原文地址:https://www.cnblogs.com/wangyang0210/p/14299395.html
Copyright © 2011-2022 走看看