搭建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端远程管理主机
file
下图为添加主机界面:
file

添加环境

添加环境,之后创建发布应用的时候便于分类管理
file

应用管理

spug的功能是让开发通过该平台发布应用到远程主机
所以着重讲如何配置应用
应用发布--发布配置里添加应用
file
再在刚新建的应用上点击新建发布--常规发布

  • 并行发布:可同时发布到多台主机,发布速度快,但是如果有报错可能导致多台主机的服务都不可用
  • 串行发布:一台台发布。如果有报错会停止,但是发布速度慢。
  • 在配置应用的时候,填写仓库地址"http://[username]:[password]@git.xxx.com:9090/[servername].git"

file

file

file

发布应用

上一步已经配置了应用的相关流水
当用户要发布版本的时候,点击应用发布--发布申请
file
点击发布后,状态变为待审核
file
等审核人员审核通过后,状态变成待发布
此时发布者可以选择发布。发布有两种方式,分别是补偿和全量
file
点击发布后,弹出发布日志
file
在目标主机查看,发现代码已拉取到目标主机指定目录
file

用户与权限管理

实例

我需要能够自动化编译、测试和打包 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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。