• 【云原生】Docker Compose 构建 Jenkins


    Jenkins

    创建目标文件夹

    $ cd /usr/local
    $ mkdir docker
    $ cd docker
    $ mkdir jenkins
    $ cd jenkins
    $ vi docker-compose.yml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    创建docker-compose.yml

    内容如下:

    version: '3.1'
    services:
      jenkins:
        restart: always
        image: jenkins/jenkins
        container_name: jenkins
        ports:
          # 发布端口
          - 8080:8080
          # 基于 JNLP 的 Jenkins 代理通过 TCP 端口 50000 与 Jenkins master 进行通信
          - 50000:50000
        environment:
          TZ: Asia/Shanghai
        volumes:
          - ./data:/var/jenkins_home
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    安装过程中会出现数据卷目录权限问题,用以下命令解决:

    chown -R 1000 /usr/local/docker/jenkins/data
    
    • 1

    启动容器

    docker-compose up -d
    
    • 1

    启动完成后访问:http://ip:8080

    解锁 Jenkins

    在这里插入图片描述

    Jenkins 第一次启动时需要输入一个初始密码用以解锁安装流程,使用 docker logs jenkins 即可方便的查看到初始密码。也可以根据提示在容器中查看/var/jenkins_home/secrets/initialAdminPassword文件。

    docker logs -f jenkins
    
    • 1
    *************************************************************
    *************************************************************
    *************************************************************
    
    Jenkins initial setup is required. An admin user has been created and a password generated.
    Please use the following password to proceed to installation:
    
    67b9966bc4334a17ad7a7daef043bac8
    
    This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
    
    *************************************************************
    *************************************************************
    *************************************************************
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    插件安装

    插件是 Jenkins的核心,其丰富的插件可以满足不同人群的不同需求。

    Jenkins 官网插件地址:https://plugins.jenkins.io/

    输入初始密码后,选择自选方式安装插件。

    在这里插入图片描述

    注意:除了默认勾选的插件外,一定要勾选 Publish over SSH 插件,这是我们实现持续交付的重点插件。

    在这里插入图片描述

    点击安装后,根据网络情况,安装时间不一样,耐性等待即可。

    出现部分插件安装失败时,点击重试按钮,多次重试,如果还是无法安装,记住这些插件的名字,稍后可以手动安装。

    在这里插入图片描述

    安装成功效果图

    创建管理员账号

    在这里插入图片描述

    进入首页

    在这里插入图片描述

    Jenkins手动安装插件

    • 如下例子为安装中文插件

    • Manage Jenkins -> Manage Plugins -> Avaliable

    在这里插入图片描述

    • 右上角搜索框查找想要安装的插件,选中,点击Download now and install after restart

    在这里插入图片描述
    在这里插入图片描述

    • 下载好后,重启Jenkins

      docker-compose down
      docker-compose up -d
      
      • 1
      • 2

    配置 JDK & Maven

    • 上传 JDK Maven tar 包到服务器(容器数据卷目录),进行解压缩。

    • Manage Jenkins -> Global Tool Configuration系统管理->全局工具配置)。

    • 安装 JDK

      /var/jenkins_home/jdk1.8.0_152
      
      • 1

    在这里插入图片描述

    • 安装Maven

    在这里插入图片描述

    • 点击保存

    安装动态参数插件

    该插件的主要目的是为了方便我们后面在做项目构建时可以按照版本进行构建(支持一键回滚)

    • Manage Jenkins -> Manage Plugins -> Avaliable

    • 搜索 Extended Choice Parameter

    • 点击Download now and install after restart

    在这里插入图片描述

    配置 Jenkins 的 GitLab SSH 免密登录

    • 交互式进入 Jenkins 容器

      docker exec -it jenkins /bin/bash
      
      • 1
    • 生成 SSH KEY

      ssh-keygen -t rsa -C "your_email@example.com"
      
      • 1
    • 查看公钥

      cat /var/jenkins_home/.ssh/id_rsa.pub
      
      • 1
    • 复制公钥到 GitLab

    在这里插入图片描述

    • 手动克隆一次项目,该步骤的主要作用是为了生成和服务器的验证信息

      jenkins@730898bc8b96:~$ git clone ssh://git@192.168.50.131:2222/test/test.git
      Cloning into 'test'...
      The authenticity of host '[192.168.50.131]:2222 ([192.168.50.131]:2222)' can't be established.
      ECDSA key fingerprint is SHA256:x21ujjNoJ+7wXGszSI7s70szbK0/+7mTOeDP5h0saMs.
      Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
      Warning: Permanently added '[192.168.50.131]:2222' (ECDSA) to the list of known hosts.
      remote: Counting objects: 3, done.
      remote: Total 3 (delta 0), reused 0 (delta 0)
      Receiving objects: 100% (3/3), done.
      jenkins@730898bc8b96:~$ 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    • 查看生成文件

      jenkins@730898bc8b96:~$ cd .ssh/
      jenkins@730898bc8b96:~/.ssh$ ls -al
      total 20
      drwx------  2 jenkins jenkins 4096 Apr  9 19:03 .
      drwxr-xr-x 16 jenkins root    4096 Apr  9 19:03 ..
      -rw-------  1 jenkins jenkins 2602 Apr  9 18:57 id_rsa
      -rw-r--r--  1 jenkins jenkins  572 Apr  9 18:57 id_rsa.pub
      -rw-r--r--  1 jenkins jenkins  222 Apr  9 19:03 known_hosts
      jenkins@730898bc8b96:~/.ssh$ 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

    配置 Publish over SSH

    • 系统管理 -> 系统设置 -> Publish over SSH

    在这里插入图片描述

    • 点击新增,其中 Remote Directory 是指 Jenkins 可以在目标服务器操作的目录,选择 Use password, 输入目标服务器密码

    在这里插入图片描述

    • 测试能否正常通信

    在这里插入图片描述

    • 点击保存

    持续交付 Maven 项目

    为项目创建标签

    GitLab 中为项目创建标签

    在这里插入图片描述
    在这里插入图片描述

    在 Jenkins 中创建 Maven Project

    Jenkins 中创建一个基于 Maven 的任务
    在这里插入图片描述
    在这里插入图片描述

    这里没有Maven 项目选项,需要安装插件 Maven Integration Pipeline Maven Integration

    在这里插入图片描述
    在这里插入图片描述

    配置第一次构建

    在这里插入图片描述

    构建项目

    在这里插入图片描述

    查看构建日志

    在这里插入图片描述
    在这里插入图片描述

    配置正式构建

    增加参数化构建过程

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    这里使用了 Groovy 脚本来查询最近的 tags 版本,代码如下:

    def ver_keys = [ 'bash', '-c', 'cd /var/jenkins_home/workspace/myshop-dependencies;git pull>/dev/null; git remote prune origin >/dev/null; git tag -l|sort -r |head -10 ' ]
    ver_keys.execute().text.tokenize('\n')
    
    • 1
    • 2
    关闭源码管理

    在这里插入图片描述

    增加构建步骤

    在这里插入图片描述
    在这里插入图片描述

    shell 脚本代码如下:

    echo $RELEASE_VERSION
    cd /var/jenkins_home/workspace/myshop-dependencies
    git checkout $RELEASE_VERSION
    git pull origin $RELEASE_VERSION
    mvn clean package
    
    • 1
    • 2
    • 3
    • 4
    • 5
    使用参数化构建项目

    在这里插入图片描述

    批准 groovy 脚本

    在这里插入图片描述
    在这里插入图片描述
    再次点击参数化构建

    在这里插入图片描述
    在这里插入图片描述

    查看构建日志

    在这里插入图片描述
    在这里插入图片描述

    发送文件或执行远程命令

    在这里插入图片描述
    在这里插入图片描述

    • Source files:需要传输到远程目标服务器的文件

      **/*.jar,docker/**
      
      • 1
    • Remove prefix:删除前缀。比如传输 **/*.jar,我们打包的 .jar 文件是在 target 目录下的,传输时会一并创建 target 目录,如果不希望创建 target 目录,则可以使用该参数屏蔽掉这些前缀文件夹。

    • Remote directory:在远程目标服务器创建操作目录

      myapp
      
      • 1
    • Exec command:在远程目标服务器执行控制台命令

      cd /usr/local/jenkins/myapp
      cp target/myapp-1.0.0-SNAPSHOT.jar docker
      cd docker
      docker build -t 192.168.50.128:5000/myapp:v1.0.0 .
      docker push 192.168.50.128:5000/myapp:v1.0.0
      docker-compose down
      docker-compose up -d
      docker image prune -f
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
  • 相关阅读:
    一条update语句到底加了多少锁?带你深入理解底层原理
    C++学习第三十二天----继承和使用引用参数
    静态工厂模式-反射工厂模式-注解工厂模式代码实现
    卡尔曼家族从零解剖-(04)贝叶斯滤波→细节讨论,逻辑梳理,批量优化
    k8s - Flannel
    数据要素市场化的理论内涵、现实挑战和实践路径
    hystrix服务降级处理方案
    物通博联持续参与京东方(BOE)工厂数字化项目
    基于蝙蝠算法的无人机航迹规划-附代码
    假ArrayList导致的线上事故......
  • 原文地址:https://blog.csdn.net/qq_41779565/article/details/125514664