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 

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"
  ]
}

注意:该文件必须符合 json 规范,否则 Docker 将不能启动。

重新启动服务。

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 离线插件下载目录

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

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 "[email protected]"

一直回车...
  • 查看公钥
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

注意: git 配置的地址需要是配置gitee项目的 ssh 项目地址。

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

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