1、Docker镜像拉取 Jenkins 环境命令

docker pull jenkins/jenkins:lts

查看下拉取的镜像

docker images

2、通过容器编排方式构建 Jenkins 容器

创建对应目录

# 创建对应目录
mkdir -p /data/jenkins/jenkins_home/
chown -R 1000:1000 /data/jenkins/jenkins_home/ + data
- docker-compose.yml // docker-compose执行文件
+ /data/jenkins
- jenkins_home // Jenkins挂载卷

docker-compose.yml文件配置

version: "3"
services:
jenkins:
user: root
restart: "always"
image: jenkins/jenkins:lts
container_name: jenkins
privileged: true
ports:
- 8080:8080
- 50000:50000
environment:
JAVA_OPTS: -Duser.timezone=Asia/Shanghai
volumes:
- /data/jenkins/jenkins\_home/:/var/jenkins\_home
- /data/jenkins/workspace/:/root/.jenkins/workspace \
- /usr/local/apache-maven-3.6.0:/usr/local/maven
- /usr/local/maven/maven-3.6.0/repository:/usr/local/maven/repository
- /usr/local/jdk1.8.0_211:/usr/local/jdk
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /etc/localtime:/etc/localtime
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
- /usr/lib/x86\_64-linux-gnu/libltdl.so.7:/usr/lib/x86\_64-linux-gnu/libltdl.so.7
- /root/.ssh:/root/.ssh # (可选)免密配置时,公钥可以直接在本地配置

3、启动容器环境

需要进入 compose 目录下面输入以下命令,进行环境的启动

docker-compose up -d

4、docker-compose 其它操作

镜像内容器进行操作后可以保存成新的镜像,比如容器内安装了jdk、配置了环境变量可以保存为新的镜像

# 找出当前运行的容器ID
docker ps # 根据containerId,创建新镜像
docker commit 5d81d56b18b6 jenkins/jenkins:centos.v1

修改 docker-compose 可以对创建的容器根据新镜像进行修改

version: "3"
services:
jenkins:
user: root
image: jenkins/jenkins:lts
ports:
- 8080:8080
- 50000:50000
restart: "always"
container_name: jenkins
environment:
JAVA_OPTS: -Duser.timezone=Asia/Shanghai
#比如新增环境变量
java_home = xxx 仅做举例
volumes:
- /home/jenkins/jenkins\_home/:/var/jenkins\_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
privileged: true

删除之前的容器

docker-compose down

重启成新的容器

docker-compose up -d

5、配置 Jenkins

前提,Jenkins 部署应用到远程服务器上,必须要实现 Jenkins 服务器免密登录到远程服务器上,同时远程服务器也要免密登录到 Jenkins 服务器上拷贝对应的jar包。所以,配置 Jenkins 前保证两台服务器互相免密登录。这块配置,可以查看我之前写的文字 [ Linux系统两台机器互免密登录 ],很简单。

5.1首先配置 ssh 插件

1、安装 ssh 相关的插件,直接在插件中心搜索 ssh 然后按装如下两个插件

①插件,主要用于链接远程服务器全局配置(公共配置);

②插件,主要用于链接远程服务器传文件配置,在项目里配置。

2、全局配置 Publish over SSH,系统管理->系统配置,下拉找到即可

第1个标注的地方,如果生成私钥的时候,没设置密码,不用填写任何内容留空即可;

第2个标注的地方,远程服务器的别名,随意起;

第3个标注的地方,远程服务器的地址;

第4个标注的地方,远程服务器的账号名称(登录名);

第5个标注的地方,远程服务器上要放置应用的目录,这里需要注意,后期项目配置的时候填写的目录跟这个是拼接的。

第6个标注的地方,点击高级后,展开下面的填入项。

第1个标注的地方,远程服务器的密码

第2个标注的地方,远程服务器的私钥。

3、项目(job)配置 ssh 插件相关的内容-前端VUE

新建一个job,输入名称,选择流水线项目,点击确定。

这里只演示,构建这个步骤的配置,其它配置很简单,自己网上一搜就可以。

上面的截图①,对应截图下面①、②两个步骤。

构建配置第一步,Jenkins 打包项目前端应用:

上图第1个标注地方,shell脚本如下。

#!/bin/bash
cd /data/jenkins/jenkins_home/workspace/data/xxx-all/xxx-admin
#这个目录也可写成如下这样,不同Jenkins版本可能有所不同,相对与打包工程的下一级目录开始。
./dev-xxx
npm install
npm run build
cd dist
tar -cvf dev-xxx.tar *

脚本,

第2行表示,Jenkins 服务期切换目录到 Jenkins 配置的 workspace 目录下的项目工程目录下。

第5、6行,前端应用打包命令。

第7行,切换到 dist 目录,(Jenkins打包前端应用后自动生成这个目录,打包的结果都在这个目录下)

第8行,将 dist 目录下的所有内容打包(*很重要),方便传输到远程服务器(部署服务器)。

构建配置第二步,将打包结果上传到远程服务器;

上面5个配置,逐一解释如下,这里如果配置不好,项目根本无法部署到远程服务器上。

①,远程服务器的名称(别名),前面全局配置的时候已经设置过了,这里下拉选择。

②,打包结果(源文件)的目录地址,即,Jenkins 上打包后产生的内容放置的地方,这个目录很容易填错,会把你搞死。该目录是Jenkins主目录下的工程目录开始的,即工程目录下一级开始填写。

③,删除前缀,要不然你的远程服务器又会创建dist这个目录。

④,远端目录,这里需要注意,我上面配置全局(公共配置)ssh的时候,已经填写了应用部署的远端目录,https://www.yuque.com/u21187464/cf/bo7lzr#GsmxQ 这里的第5个标记,此处是基于全局公共配置的目录的拼接。

⑤,将远程服务器执行的命令,如果是前端VUE项目,就是解压上面打包的项目,脚本如下。

脚本写法一:
# cd /data/xxx-all/xxx-admin/dev-xx.tar
# tar -zxvf dev-xx.tar 脚本写二(理论上面的写法没问题,我验证Jenkins会报错):
tar -xvf /data/xxx-all/xxx-admin/dev-xx.tar -C /data/xxx-all/xxx-admin/

脚本说明,

第一行,切换目录到远程服务器部署应用的目录,

第二行,解压应用包。

这里总结下上面配置的源文件(Sourec files)这个目录,很多坑。

Jenkins 构建后会在其工作空间 workspace 目录下产生对应项目的文件夹(这个文件夹名字是创建项目时命名的项目名,如下图),此时 workspace 目录下就会有api-dev这样的文件夹,

所以,源文件目录里填写的是这个文件夹之后的目录,不要把这个文件夹也填写

4、项目(job)配置 ssh 插件相关的内容-java-jar包

因为上面讲过了,这里直接截图展示下,

Jenkins 构建后其工作目录产生的 api 项目目录如下。

①标识的地方,意思是先构建运行完成后,再传输jar包到远程服务器,我这里构建指 maven 构建后在传输。

②标识的地方,源文件目录,上面讲过了,api项目名称后面的目录开始填写。

③标识的地方,删除前缀,jar包前面的目录都删除,要不然远程服务器上会创建这个目录。

6、总结

1、Jenkins 编译构建后,需要将应用包(jar包、war包等)部署到远程服务器上,所以,必须保证 Jenkins 服务器和远程服务器互相免密访问,配置上面已经说过了。

2、如果你的 Jenkins 服务器和应用服务器部署在 docker 容器里的话,需要保证两个容器互相免密登录,具体配置跟上面提到的配置一样,只是需要在容器里操作而已。

3、上面 Jenkins 打包配置我举例的是前端 vue 打包的结果,压缩成压缩包和上传部署到远程服务器的过程,如果api部署的话,流程大概一样,只是不需要压缩和解压而已。


读后感

来这里找我交流

Docker 搭建 Jenkins 持续集成自动化构建环境的更多相关文章

  1. 个人环境搭建——搭建jenkins持续构建集成环境

    ---恢复内容开始--- 搭建jenkins持续构建集成环境  要搭建jenkins持续构建集成环境,首先要安装tomcat和JDK:   第一部分,基本说明:   敏捷(Agile) 在软件工程领域 ...

  2. Docker搭建Jenkins+Maven/Gradle——代码自动化运维部署平台(二)

    一.简介 1.Jenkins 概述: Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台.这是一个免费的源代码,可以处理任何类型的构建或持续集成.集成Jenkins ...

  3. Jenkins持续部署-Windows环境持续部署探究1

    目录 Jenkins持续部署-Windows环境持续部署探究1 目录 前言 目的 方案流程 技术实现 PowerShell FTP上传插件 环境变量插件 脚本执行 远程调用 升级服务 启动服务 总结 ...

  4. 使用Docker搭建Jenkins+Docker持续集成环境(自动化构建发布部署)

    本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...

  5. 构建Docker+Jenkins持续集成环境

    docker和Jenkins不是什么新东西了,两者结合也不是什么稀奇的事情,也已经有很多Jenkins和docker相结合的文章,此文仅为自己的一点心得实践,如有不对的地方,欢迎大家纠正. 先贴上大致 ...

  6. Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境

    本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...

  7. Hudson(Jenkins)持续集成插件开发环境搭建

    Hudson持续集成插件开发环境搭建 第一步安装java jdk,至于版本的话推荐1.6以上吧.安装好jdk设置环境变量,确保你在cmd中输入java -version有提示你jdk的版本信息等,也就 ...

  8. Docker搭建Jenkins+Gogs+Maven/Gradle——代码自动化运维部署平台(三)

    一.简介 1.CI/CD CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.作为一个面向开发和运营团队的解决方案,CI/C ...

  9. CentOS 7 部署Gitlab+Jenkins持续集成(CI)环境

    持续集成概述及运行流程 : 持续集成概述 :持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中 ,可以频繁的将代码部署集成到主干,并进行自动化测试  开发→代 ...

随机推荐

  1. 做一个U盘的学习路线

    最近想研究一个U盘,然后顺便熟悉一下USB协议.因为USB协议比较复杂, 常用的复杂外设除了WiFi,Ethernet,SDIO和USB这些就是USB了,学习USB的时候肯定要拿一个东西下手,所以简单 ...

  2. Nginx TP5环境配置

    Apache默认支持Pathinfo模式  Nginx不支持  需要手动配置  Apache默认支持Pathinfo模式  Nginx不支持  需要手动配置 server { #配置监听端口 list ...

  3. css定位:p:nth-child(n)

    p:nth-child(n) 定位p标签下的第一个元素,下标从1开始. 首先是一个标签下有多个相同的元素. 如index_service_cnt js_service_list下有多个class=&q ...

  4. K8s一键安装

    安装案例: 系统:Centos可以多台Master(Master不能低于3台)多台Node此案例使用三台Master两台Node,用户名root,密码均为123456 master 192.168.2 ...

  5. 利用Qt中的ui文件生成PyQt5程序,自定义槽函数

    1.在Qt Creator4.8.0上面设计如上.ui文件 2.点击上方图标,可以建立信号-槽连接,button_click()为自定义槽函数 3.设计目的:点击clear按钮,可消除上方文本框中的内 ...

  6. pkusc2021游记

    @ 目录 前言 Day 0 Day 1 Day 2 Day 3 前言 到时候APIO的大概也会写在这篇里吧. Day 0 车,公交,飞机,公交,车 坐了半天的交通终于到了,整个人都坐的晕乎乎的,然后看 ...

  7. 服务器内部模拟Http请求

    前言: 在做小程序的开发时需要获取用户的openId用来做唯一标识,来获取对应用户的相关数据 官方的文档说明上有四个必须传的参数 其中appId和appSecret可在自己的微信公众号平台上获取,同时 ...

  8. Python自动化测试发送邮件太麻烦?!一起聊一聊 Python 发送邮件的3种方式

    1. 前言 发送邮件,我们在平时工作中经用到,做为测试人员,在自动化测试中用的也比较多,需要发送邮件给某领导 SMTP是Python默认的邮件模块,可以发送纯文本.富文本.HTML 等格式的邮件 今天 ...

  9. nsq topic

    与Topic相关的代码主要位于nsqd/topic.go中. 上一篇文字我们讲解了下nsq的启动流程.对nsq的整体框架有了一个大概的了解.本篇文章就是由大到小.对于topic这一部分进行详尽的讲解. ...

  10. CEF使用过程问题合集

    CEF使用过程问题合集 1.Couldn't mmap icu data file 解决方案:检查程序执行目录下是否有icudtl.dat文件,如果没有请从cef的Resources文件夹中复制一份. ...