容器构建 + 项目发布 java 项目
# 前言
本文主要介绍: 如何从零开始使用 Jpom 中的容器构建 java 项目并发布到节点中
文中使用到的依赖环境版本仅供参考,实际使用中请根据业务情况来安装对应的版本
注意:本文采用一键安装同时基于 2.8.8 版本讲解,系统为 ubuntu
# 需要准备的环境
- Jpom 服务端、Jpom 插件端(安装 jpom 需要 java 环境)
- 一个安装了 docker 的服务器(可以和安装 Jpom 服务端在同一个服务器)
# 安装服务端
# 提前创建好文件夹 并且切换到对应到文件夹执行命令
mkdir -p /home/jpom/server/
cd /home/jpom/server/
apt-get install -y wget && wget -O install.sh https://jpom.top/docs/install.sh && bash install.sh Server jdk
2
3
4
# 初始化服务端
# 添加超级管理账号
添加一个超级管理员账号,请妥善保管此账号同时请设置安全度较强的密码
# 开启账号 MFA
为了系统安全,强烈建议超级管理员账号开启 MFA 两步验证
# 安装 docker
# 这里使用了阿里云镜像,可以更新自己业务选择
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2
# 状态管理
# 查看状态
systemctl status docker
# 停止
systemctl stop docker
# 启动
systemctl start docker
# 重启
systemctl daemon-reload && systemctl restart docker
2
3
4
5
6
7
8
# Docker TLS 证书 (非必须)
如果服务端所在端服务器已经安装 docker 在 2.8.15+ 版本会自动加载本地 docker 到 Jpom 中,这样就可以不用修改任何配置即可使用 jpom 管理本地 docker。即可忽略该步骤
Jpom 使用 docker http 接口是实现和 docker 通讯和管理,但是默认没有开启任何认证这样使得 docker 极不安全,如果端口暴露到公网还容易出现挖矿情况
所以这里 我们强烈建议您使用 TLS 证书来连接 docker 提升安全性
这里提供一个快速生成证书到脚本示例:(使用中请一定修改脚本内的 IP 或者可能无法使用的情况奥)
#
# -------------------------------------------------------------
# 自动创建 Docker TLS 证书
# wget https://gitee.com/dromara/Jpom/raw/master/script/docker-tls.sh
# curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# systemctl daemon-reload && systemctl restart docker
# -------------------------------------------------------------
# 以下是配置信息
# --[BEGIN]------------------------------
NOW_PATH=$(
cd "$(dirname "$0")" || exit
pwd
)"/"
echo "当前目录:${NOW_PATH} 证书文件将保存在此文件夹下"
read -p "请输入证书使用的 IP 地址或者 HOST: " HOST
#
echo "您输入的是:${HOST} 证书只能在这个 IP 或者 HOST 下使用,证书密码和输入的一致"
# --[INIT PARAMETER]------------------------------
PASSWORD="$HOST"
COUNTRY="CN"
STATE="$HOST"
CITY="$HOST"
ORGANIZATION="$HOST"
ORGANIZATIONAL_UNIT="Dev"
COMMON_NAME="$HOST"
EMAIL="$HOST@docker-tls.com"
# --[END]--
# Generate CA key
openssl genrsa -aes256 -passout "pass:$PASSWORD" -out "ca-key.pem" 4096
# Generate CA
openssl req -new -x509 -days 365 -key "ca-key.pem" -sha256 -out "ca.pem" -passin "pass:$PASSWORD" -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL"
# Generate Server key
openssl genrsa -out "server-key.pem" 4096
# Generate Server Certs.
openssl req -subj "/CN=$COMMON_NAME" -sha256 -new -key "server-key.pem" -out server.csr
rm -f extfile.cnf
echo "subjectAltName = DNS.1:$HOST,IP.1:127.0.0.1,IP.2:$HOST" >>extfile.cnf
echo "extendedKeyUsage = serverAuth" >>extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "server-cert.pem" -extfile extfile.cnf
# Generate Client Certs.
rm -f extfile.cnf
openssl genrsa -out "key.pem" 4096
openssl req -subj '/CN=client' -new -key "key.pem" -out client.csr
echo "extendedKeyUsage = clientAuth" >>extfile.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "cert.pem" -extfile extfile.cnf
rm -f client.csr server.csr ca.srl extfile.cnf
# check
if [ -f "${NOW_PATH}key.pem" -a -f "${NOW_PATH}ca.pem" -a -f "${NOW_PATH}ca-key.pem" -a -f "${NOW_PATH}server-cert.pem" -a -f "${NOW_PATH}server-key.pem" ]; then
echo "证书生成完成"
echo "客户端使用文件:key.pem ca.pem cert.pem"
echo "Docker 端使用文件:ca.pem server-cert.pem server-key.pem"
echo "Docker 推荐配置内容:-H tcp://0.0.0.0:2375 --tlsverify --tlscacert=${NOW_PATH}ca.pem --tlscert=${NOW_PATH}server-cert.pem --tlskey=${NOW_PATH}server-key.pem"
else
echo "证书生成不完成,请检查配置和根据错误日志排查"
fi
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
同时将生成到证书下载到本地 保存使用
证书示例:
# 配置 docker
# 查看 docker.service 路径
systemctl status docker
# 配置 tcp + tls (非必须)
如果服务端所在端服务器已经安装 docker 在 2.8.15+ 版本会自动加载本地 docker 到 Jpom 中,这样就可以不用修改任何配置即可使用 jpom 管理本地 docker。即可忽略该步骤
vim /lib/systemd/system/docker.service
ExecStart 需要添加内容
--tlsverify --tlscacert=/home/docker/tls-ca/ca.pem --tlscert=/home/docker/tls-ca/server-cert.pem --tlskey=/home/docker/tls-ca/server-key.pem -H tcp://0.0.0.0:2375
# 配置示例
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert=/home/docker/tls-ca/ca.pem --tlscert=/home/docker/tls-ca/server-cert.pem --tlskey=/home/docker/tls-ca/server-key.pem -H tcp://0.0.0.0:2375
2
# 添加 docker
注意这里 host 为:tcp://127.0.0.1:2375
这里因为连接本地 docker 所有使用 127.0.0.1 实际中请更换
证书为压缩文件,压缩文件需要包含生成证书文件:key.pem
ca.pem
cert.pem
# 安装插件端
# 提前创建好文件夹 并且切换到对应到文件夹执行命令
mkdir -p /home/jpom/agent/
cd /home/jpom/agent/
apt-get install -y wget && wget -O install.sh https://jpom.top/docs/install.sh && bash install.sh Agent jdk
2
3
4
# 添加节点
注意要填写端口号哟
这里的节点账号密码和超级管理员账号密码是两个都行哟
节点账号密码在安装启动成功后会输出到控制台,请根据输出到内容填写。如果自己修改了账号密码则填写修改后的
# 配置白名单
项目白名单是为了防止随意配置目录,同时也为了保护系统目录
# 创建项目(jar)
# 添加构建仓库
这里使用 jpom 演示的仓库中的 python
# 添加容器构建
这里需要注意构建产物目录:是指仓库下面的相对路径
发布项目需要选择节点再选择项目
DSL 示例:
# 基础镜像 目前仅支持 ubuntu-latest
runsOn: ubuntu-latest
# 使用哪个 docker 构建,填写 docker 标签 默认查询可用的第一个,如果 tag 查询出多个也选择第一个结果
fromTag: loacl
steps:
- uses: java
version: 8
- uses: maven
version: 3.8.5
# 将容器中的文件缓存到 docker 卷中
- uses: cache
path: /root/.m2
- run: cd ${JPOM_WORKING_DIR} && mvn package -s settings.xml
2
3
4
5
6
7
8
9
10
11
12
13
完整示例:✈️进入>>
目前支持都插件有(更多插件尽情期待):
- java
- sdk 镜像使用:https://mirrors.tuna.tsinghua.edu.cn/
- 支持版本有:8, 9, 10, 11, 12, 13, 14, 15, 16, 17
- maven
- sdk 镜像使用:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/
- node
- sdk 镜像使用:https://registry.npmmirror.com/-/binary/node
执行构建
第一次构建需要较长时间,请耐心等待 如果构建中发生非预期错误,请根据错误信息检查或者看看相关环境是否匹配