docker : Jenkins 拉取 Gitee 代码,构建镜像启动并上传私服(支持版本回滚)

docker : Jenkins 拉取 Gitee 代码,构建镜像启动并上传私服

1. 环境准备工作

# Linux 系统
root@ubuntu:/usr/local/docker/registry# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:    18.04
Codename:   bionic

# docker 版本
root@ubuntu:/usr/local/docker/registry# docker version
Client: Docker Engine - Community
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.16.12
 Git commit:        e91ed57
 Built:             Mon Dec 13 11:45:27 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.12
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.12
  Git commit:       459d0df
  Built:            Mon Dec 13 11:43:36 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.12
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  
  # docker-compose 版本
root@ubuntu:/usr/local/docker/registry# docker-compose version
Docker Compose version v2.2.0

2. gitee 创建仓库与项目

gitee 参考地址: https://gitee.com/onnoA/jenkins_test.git

2.1. 新建项目

image-20220110020639051
image-20220110020743571

2.2. 本地克隆项目,并并将自己准备的测试项目复制进去,并上传 gitee

image-20220110020911196

项目创建 docker 目录, docker 目录下新建文件 Dockerfile 、docker-compose.yml

image-20220110021244088

Dockerfile

FROM openjdk:8-jre
MAINTAINER onnoa <onnoaheng@163.com>

ENV APP_VERSION 1.0.0-SNAPSHOT
ENV DOCKERIZE_VERSION v0.6.1
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
    && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
    && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz

RUN mkdir /app

COPY jenkins_test-$APP_VERSION.jar /app/app.jar
ENTRYPOINT ["dockerize", "-timeout", "5m", "-wait", "tcp://192.168.40.129:3306", "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar"]

EXPOSE 8090

docker-compose.yml

version: '3.1'
services:
  jenkins_test:
    image: 192.168.40.129:5000/jenkins_test:v1.0.0
    container_name: jenkins_test
    ports:
      - 8090:8090

2.3. 创建标签

image-20220110021027903
image-20220110021125758

3. 基于 docker-compose 安装 registry

3.1. 新建目录

mkdir -p /usr/local/docker/registry
# 进入目录
cd /usr/local/docker/registry

3.2. 新建 docker-compose.yml 文件

vi docker-compose.yml

docker-compose.yml 文件内容

version: '3.1'
services:
  registry:
    image: registry
    restart: always
    container_name: registry
    ports:
      - 5000:5000
    volumes:
      - /usr/local/docker/registry/data:/var/lib/registry

3.3. 启动 docker-compose.yml

docker-compose up -d

3.4. 页面访问

http://ip:5000/v2/
image

3.5. 配置 docker registry 客户端

/etc/docker/daemon.json 中增加如下内容(如果文件不存在请新建该文件)

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "ip:5000"
  ]
}

<strong style="color:red;"> 注意:该文件必须符合 json 规范,否则 Docker 将不能启动。</strong>

重新启动服务。

sudo systemctl daemon-reload
sudo systemctl restart docker

检查客户端配置是否生效

docker info
# 返回以下内容则说明配置生效
Insecure Registries:
192.168.40.129:5000
image-20220110015823565

4. docker 安装 jenkins与配置

4.1. 基于docker-compose 安装 jenkins

新建目录

mkdir -p /usr/local/docker/jenkins

jenkins 目录下新增 docker-compose.yml 文件

vi docker-compose.yml

docker-compose.yml 文件内容

version: '3.1'
services:
  jenkins:
    restart: always
    image: jenkins/jenkins:latest-jdk8
    container_name: jenkins
    ports:
      # 发布端口
      - 8085:8080
      # 基于 JNLP 的 Jenkins 代理通过 TCP 端口 50000 与 Jenkins master 进行通信
      - 50000:50000
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./data:/var/jenkins_home

在jenkins 目录下使用 docker-compose up 命令启动 jenkins。若第一次启动失败。则通过命令修改数据卷权限

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

页面访问 jenkins : http://ip:8085

查看初始密码

# 第一种查看密码方式
docker logs jenkins
# 第二种
cat /usr/local/docker/jenkins/data/secrets/initialAdminPassword

4.2. jenkins 页面配置

4.2.1. 插件安装

选择安装插件:

image

需要安装的插件

Dashboard View
Publish over SSH
Maven Integration plugin
Locale 本地化插件 (显示中文)
Extended Choice Parameter 动态参数插件(支持一键回滚)

若在线无法安装相应的插件,可选择离线安装的方式, Jenkins 离线插件下载目录

<strong style="color:red;"> **注意:若选择的插件安装失败,则先进入下一步,创建 jenkins 用户,进入jenkins 页面再进行插件的安装。系统管理 --》插件管理 ,搜索插件进行安装即可。 **</strong>

4.2.2. 基础配置

4.2.2.1. 本地化

中文本地化: 系统管理 -》 系统设置 -》 Locale

image-20220110011323560
4.2.2.2. 配置 Public Over SSH

配置 open ssh: 系统管理 -》 系统设置 -》Publish over SSH (需要安装Publish over SSH插件成功才会有此选项) -》 新增

image-20220110011845279

高级 -》 输入服务器密码

image-20220110012044971

下拉,点击 Test Connection ,若左边返回成功,则说明能成功连接上该服务器

[图片上传失败...(image-173e15-1641782109458)]

4.2.2.3. 安装 jdk 与 maven

Jenkins 安装 Java 与 Maven

javamaven 的jar上传到jenkins的宿主机路径:/usr/local/docker/jenkins/data目录。并进行解压。

解压:

tar -zxvf xxx.tar.gz
# 文件分享连接: https://pan.baidu.com/s/1f6dA0jobOY2SIMGy2IHgiA 密码:zhnb 
  • 安装 jdk

系统管理-》global tool configuration(通用工具配置)-》JDK 安装 -》新增jdk

image-20220110013442683
  • 安装 maven

系统管理-》global tool configuration(通用工具配置)-》JDK 安装 -》新增 maven

image-20220110013500408
4.2.2.4. 配置 jenkins 与 gitee 的免密登录

配置 jenkins 与 gitee 免密登录

  • 交互式进入 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
  • 复制公钥到 Gitee

访问 gitee 仓库 -》 头像 -》 设置 -》 SSH公钥

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

克隆之前,交互式进入 jenkins docker exec -it jenkins /bin/bash。 cd 回车,后再 git clone gitee 项目地址, 过程种输入 yes , 此操作是为了拿到 cd .ssh/目录下的known_hosts文件。

4.2.2.5. jenkins 配置项目(分两次配置项目)
  • jenkins 第一次配置项目

新建任务 -》构建一个Maven 项目(并输入项目名称: 如 jenkins_test) -》

image-20220110014141343
image-20220110014209674

<strong style="color:red;">注意: git 配置的地址需要是配置gitee项目的 ssh 项目地址。</strong>

image-20220110095709615
image-20220110014309329
  • jenkins 第二次配置
image-20220110014405712

Extended Choice Paramter Name: RELEASE_VERSION

Basic Parameter Types: Single Select

Choose Source for Value: Groovy Script

源码管理: 无

Post Steps: Run regardless of build result

Execute shell 命令: shell 脚本如下

Add post-build step: Send files or execute commands over SSH

SSH Server Name: 选择配置的 Public Over SSH 服务器(即要部署该项目的服务器)

Transfer Set
Source files: **/*.jar,docker/**

  Remote directory: jenkins_test(项目名称,主要是当部署项目是,在部署目录 /usr/local/deploy 下能够根据项目名进行区分)

  Exec command: linux 执行命令如下

Groovy 脚本

def ver_keys = [ 'bash', '-c', 'cd /var/jenkins_home/workspace/jenkins_test;git pull>/dev/null; git remote prune origin >/dev/null; git tag -l|sort -r |head -10 ' ]
ver_keys.execute().text.tokenize('\n')

shell 脚本

echo $RELEASE_VERSION
cd /var/jenkins_home/workspace/jenkins_test
git checkout $RELEASE_VERSION
git pull origin $RELEASE_VERSION
mvn clean install

Linux 执行命令

cd /usr/local/deploy/jenkins_test
cp target/jenkins_test-1.0.0-SNAPSHOT.jar docker
cd docker
docker build -t 192.168.40.129:5000/jenkins_test:v1.0.0 .
docker push 192.168.40.129:5000/jenkins_test:v1.0.0
docker-compose down
docker-compose up -d
docker image prune -f
image-20220110014449210
image-20220110014513041
image-20220109205123872
image-20220110014841070
image-20220110100357605

选择前面配置的 Public Over SSH 服务器(即要部署的服务器)

Exec command

cd /usr/local/deploy/jenkins_test
cp target/jenkins_test-1.0.0-SNAPSHOT.jar docker
cd docker
docker build -t 192.168.40.129:5000/jenkins_test:v1.0.0 .
docker push 192.168.40.129:5000/jenkins_test:v1.0.0
docker-compose down
docker-compose up -d
docker image prune -f

进行构建: 点击进入项目 --》 Build with Paramters(参数化构建),我们就可以根据 gitee 项目中配置的标签进行版本发布与回滚。如,我现在有 v1.0.0 与 v1.0.1 两个版本,当 v1.0.1 有问题时,我可以回滚到 v1.0.0 版本

image-20220109205438120
image-20220109205452480
image-20220109205516987
image-20220110103153864
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容