Docker Compose 构建 Jenkins

简介: 使用Docker Compose 搭建Jenkins

Jenkins

创建目标文件夹

$ cd /usr/local
$ mkdir docker
$ cd docker
$ mkdir jenkins
$ cd jenkins
$ vi docker-compose.yml

创建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

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

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

启动容器

docker-compose up -d

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

解锁 Jenkins

jenkins_01.png

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

docker logs -f jenkins
*************************************************************
*************************************************************
*************************************************************

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

*************************************************************
*************************************************************
*************************************************************

插件安装

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

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

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

jenkins_02.jpg

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

jenkins_03.jpg

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

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

jenkins_04.jpg

安装成功效果图

创建管理员账号

jenkins_05.jpg

进入首页

jenkins_06.jpg

Jenkins手动安装插件

  • 如下例子为安装中文插件
  • Manage Jenkins -> Manage Plugins -> Avaliable

    jenkins_07.jpg

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

    jenkins_08.jpg

    jenkins_09.jpg

  • 下载好后,重启Jenkins

    docker-compose down
    docker-compose up -d

配置 JDK & Maven

  • 上传 JDK Maven tar 包到服务器(容器数据卷目录),进行解压缩。
  • Manage Jenkins -> Global Tool Configuration系统管理->全局工具配置)。
  • 安装 JDK

    /var/jenkins_home/jdk1.8.0_152

    jenkins_11.jpg

  • 安装Maven

    jenkins_12.jpg

  • 点击保存

安装动态参数插件

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

  • Manage Jenkins -> Manage Plugins -> Avaliable
  • 搜索 Extended Choice Parameter
  • 点击Download now and install after restart

jenkins_13.jpg

配置 JenkinsGitLab SSH 免密登录

  • 交互式进入 Jenkins 容器

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

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

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

    jenkins_10.jpg

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

    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:~$ 
  • 查看生成文件

    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$ 

配置 Publish over SSH

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

    jenkins_14.jpg

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

    jenkins_15.jpg

  • 测试能否正常通信

    jenkins_16.jpg

  • 点击保存

持续交付Maven项目

为项目创建标签

GitLab 中为项目创建标签

jenkins_17.jpg
jenkins_18.jpg

Jenkins 中创建 Maven Project

Jenkins 中创建一个基于 Maven 的任务

jenkins_19.jpg

jenkins_20.jpg

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

jenkins_21.jpg

jenkins_22.jpg

配置第一次构建

jenkins_23.jpg

构建项目

jenkins_24.jpg

查看构建日志

jenkins_25.jpg
jenkins_26.jpg

配置正式构建

增加参数化构建过程

jenkins_27.jpg
jenkins_28.jpg
jenkins_29.jpg

这里使用了 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')
关闭源码管理

jenkins_30.jpg

增加构建步骤

jenkins_31.1.jpg
jenkins_31.2.jpg

shell 脚本代码如下:

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

jenkins_32.jpg

批准 groovy 脚本

jenkins_33.jpg
jenkins_34.jpg

再次点击参数化构建

jenkins_32.jpg
jenkins_35.jpg

查看构建日志

jenkins_36.jpg
jenkins_37.jpg

发送文件或执行远程命令

jenkins_38.jpg
jenkins_39.jpg

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

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

    myapp
  • 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
相关文章
|
10天前
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
164 75
|
24天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
184 77
|
8天前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
60 19
|
21天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
84 24
|
23天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
108 6
|
1月前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
58 9
|
1月前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
40 5
|
2月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
2月前
|
API Docker 容器
【赵渝强老师】构建Docker Swarm集群
本文介绍了如何使用三台虚拟主机构建Docker Swarm集群。首先在master节点上初始化集群,然后通过特定命令将node1和node2作为worker节点加入集群。最后,在master节点上查看集群的节点信息,确认集群构建成功。文中还提供了相关图片和视频教程,帮助读者更好地理解和操作。
|
Linux Docker Windows
Docker概述:什么Docker如此特别,它是如何构建的
本文讲的是Docker概述:什么Docker如此特别,它是如何构建的,【编者的话】在上一系列介绍中,我们大体地介绍了CoreOS。在这个系列中我想介绍一下Docker。本文我们看一下为什么Docker如此特别,它是如何构建的。我们会从基本开始介绍,所以读者不必担心自己是刚接触Docker的。
1376 0

热门文章

最新文章