搭建spug
安装docker
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-compose-plugin
systemctl enable docker
systemctl start docker
创建docker-compose.yml
vi docker-compose.yml
version: "3.3"
services:
db:
image: mariadb:10.8.2
container_name: spug-db
restart: always
command: --port 3306 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- /data/spug/mysql:/var/lib/mysql
environment:
- MYSQL_DATABASE=spug
- MYSQL_USER=spug
- MYSQL_PASSWORD=spug.cc
- MYSQL_ROOT_PASSWORD=spug.cc
spug:
image: openspug/spug-service
container_name: spug
privileged: true
restart: always
volumes:
- /data/spug/service:/data/spug
- /data/spug/repos:/data/repos
ports:
# 如果80端口被占用可替换为其他端口,例如: - "8000:80"
- "8080:80"
environment:
- MYSQL_DATABASE=spug
- MYSQL_USER=spug
- MYSQL_PASSWORD=spug.cc
- MYSQL_HOST=db
- MYSQL_PORT=3306
depends_on:
- db
以上配置会启动一个mysql容器。
如果要使用已有的自建数据库,
version: "3.3"
services:
spug:
image: openspug/spug-service
container_name: ops
privileged: true
restart: always
volumes:
- /data/ops/service:/data/ops
- /data/ops/repos:/data/repos
ports:
- "8080:80" # 映射端口
environment:
- MYSQL_DATABASE=ops # 数据库名
- MYSQL_USER=yunwei # 用户名
- MYSQL_PASSWORD=DrIVy9O7kzuS46 # 密码
- MYSQL_HOST=1.1.1.1 # MySQL 数据库地址(IP 或域名)
- MYSQL_PORT=3306 # MySQL 默认端口
启动容器
docker compose up -d
初始化
以下操作会创建一个用户名为ops
密码为asdf5321
的管理员账户,可自行替换管理员账户/密码。
docker exec ops init_spug ops asdf5321
访问测试
在浏览器中输入 http://localhost:8080 访问
版本升级
你可以在 系统管理/系统设置/关于 中查看当前运行的 Spug 版本,可以在更新日志查看当前最新版本,如果需要升级 Spug 请参考 版本升级文档。
配置主机
在主机管理
里可以添加要管理的主机,且spug支持web端远程管理主机
下图为添加主机界面:
添加环境
添加环境,之后创建发布应用的时候便于分类管理
应用管理
spug的功能是让开发通过该平台发布应用到远程主机
所以着重讲如何配置应用
在应用发布
--发布配置
里添加应用
再在刚新建的应用上点击新建发布
--常规发布
- 并行发布:可同时发布到多台主机,发布速度快,但是如果有报错可能导致多台主机的服务都不可用
- 串行发布:一台台发布。如果有报错会停止,但是发布速度慢。
- 在配置应用的时候,填写仓库地址"http://[username]:[password]@git.xxx.com:9090/[servername].git"
发布应用
上一步已经配置了应用的相关流水
当用户要发布版本的时候,点击应用发布
--发布申请
点击发布后,状态变为待审核
。
等审核人员审核通过后,状态变成待发布
此时发布者可以选择发布。发布有两种方式,分别是补偿和全量
点击发布后,弹出发布日志
在目标主机查看,发现代码已拉取到目标主机指定目录
用户与权限管理
实例
我需要能够自动化编译、测试和打包 Java 项目,所以需要安装maven
。
可以在spug拉取了git代码后,在容器中执行命令,让宿主机创建一个maven容器去编译。
要实现在容器中,让宿主机运行命令,需要挂载Docker socket
使容器能够控制宿主机 Docker
但是前提是容器需要安装docker客户端才能执行docker命令。所以需要在spug镜像的基础上预安装docker客户端,并生成新的镜像文件,之后再启动容器就可以直接使用了。
我想要自动化编译、测试和打包Java
项目,为此需要安装 “maven”。
具体操作是,当 spug
把 git 代码拉取下来后,要让宿主机创建一个 maven 容器去做编译工作。不过呢,要想在容器里成功让宿主机运行命令,得先挂载 “Docker socket”,这样容器才能控制宿主机的 Docker。而这里有个前提,那就是容器中必须安装 docker 客户端才能执行 docker 命令。所以,要先基于 spug 镜像提前安装好 docker 客户端,生成新的镜像文件,之后启动容器就能直接使用相应功能了。
编译镜像
Dockerfile
内容如下
FROM openspug/spug-service
# 安装必要的工具
RUN apt-get update && \
apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
# 添加 Docker 的官方 GPG 密钥
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
# 添加 Docker 的稳定版本库
RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 安装 Docker 客户端
RUN apt-get update && \
apt-get install -y docker-ce-cli
# 设置工作目录(可选)
WORKDIR /scripts
# 挂载点(可选)
VOLUME ["/scripts"]
编译
docker build -t my-openspug-docker .
修改docker-compose.yml
version: "3.3"
services:
db:
image: mariadb:10.8.2
container_name: spug-db
restart: always
command: --port 3306 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- /data/ops/mysql:/var/lib/mysql
environment:
- MYSQL_DATABASE=spug
- MYSQL_USER=spug
- MYSQL_PASSWORD=spug.cc
- MYSQL_ROOT_PASSWORD=spug.cc
spug:
image: my-openspug-docker # 使用自定义镜像
container_name: spug
privileged: true
restart: always
volumes:
- /data/ops/service:/data/spug
- /data/repos:/data/repos
- /var/run/docker.sock:/var/run/docker.sock
- /data/scripts:/scripts
ports:
- "8081:80"
environment:
- MYSQL_DATABASE=spug
- MYSQL_USER=spug
- MYSQL_PASSWORD=spug.cc
- MYSQL_HOST=db
- MYSQL_PORT=3306
depends_on:
- db
运行容器
docker-compose up -d
现在spug容器就可以了。
配置spug
接下来是配置:
代码检出前执行
:
docker run --rm --name ${SPUG_APP_NAME}_mvn -v $SPUG_REPOS_DIR/$SPUG_DEPLOY_ID:/app -w /app maven:3.9.8-amazoncorretto-17 mvn package -Dmaven.test.skip=true
代码检出后执行
:
cp $SPUG_REPOS_DIR/$SPUG_DEPLOY_ID/target/*.jar ./
应用发布前执行
:
echo "$SPUG_DST_DIR"
cd $SPUG_DST_DIR
# 构建镜像
cat << EOF >Dockerfile
# VERSION 1.0.0
# Author: robin
# 打包jar采用maven镜像
# 运行jar采用jdk基础镜像
FROM amazoncorretto:17.0.12
# 设置工作目录在镜像的 /app 目录下
WORKDIR /app
# 将jar包添加到容器中并更名为app.jar
COPY *.jar /app/
# 运行jar包
ENTRYPOINT ["java","-jar","aladdin-be-1.0-SNAPSHOT.jar"]
EOF
docker build -t aladdin-be:v1.0 .
应用发布后执行
:
cd $SPUG_DST_DIR
pwd
chmod +x tools/*.sh
echo "正在启动服务"
sh tools/start.sh
# 打印启动日志到文件
docker logs aladdin-be > aladdin-be.log 2>&1 &
echo "日志已输出到 aladdin-be.log"
# 检查服务是否启动成功
if docker ps -a | grep -q aladdin-be; then
echo "服务已成功启动"
else
echo "服务启动失败"
fi
# 检查容器状态
if docker ps -a | grep -q aladdin-be; then
echo "服务已成功启动"
else
echo "服务启动失败"
exit 1
fi
评论(0)