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. 新建项目
2.2. 本地克隆项目,并并将自己准备的测试项目复制进去,并上传 gitee
项目创建 docker 目录, docker 目录下新建文件 Dockerfile 、docker-compose.yml
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. 创建标签
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/
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
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. 插件安装
选择安装插件:
需要安装的插件
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
4.2.2.2. 配置 Public Over SSH
配置 open ssh: 系统管理 -》 系统设置 -》Publish over SSH (需要安装Publish over SSH插件成功才会有此选项) -》 新增
高级 -》 输入服务器密码
下拉,点击 Test Connection ,若左边返回成功,则说明能成功连接上该服务器
[图片上传失败...(image-173e15-1641782109458)]
4.2.2.3. 安装 jdk 与 maven
Jenkins 安装 Java 与 Maven
将 java
和 maven
的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
- 安装 maven
系统管理-》global tool configuration(通用工具配置)-》JDK 安装 -》新增 maven
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) -》
<strong style="color:red;">注意: git 配置的地址需要是配置gitee项目的 ssh 项目地址。</strong>
- jenkins 第二次配置
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
选择前面配置的 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 版本