使用Docker + Nginx + Jenkins 部署项目

175 阅读4分钟

一、准备工作

1.创建相关目录,方便维护

mkdir /docker
mkdir /docker/compose
mkdir /docker/images
mkdir /docker/jenkins_home
mkdir /project
mkdir /store
mkdir /store/mysql
mkdir /store/redis
mkdir /store/minio
mkdir /store/nginx

2.在/docker/compose下安装docker及配置镜像加速安装教程。最新的docker已经集成了docker compose功能,无需另外安装。

3.在/docker/compose下安装git,并将公钥配置到gitee或者github。

yum install -y git

# 查看是否安装成功
git --version

# 配置SSH
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"

# 生成公钥
ssh-keygen -t rsa -C "你的邮箱"

#查看公钥
cat ~/.ssh/id_rsa.pub

4.在/docker/images下安装镜像。

docker pull jenkins/jenkins:lts
docker pull nginx:alpine
docker pull mysql:8.0
docker pull redis:6.2
docker pull bitnami/minio:latest
docker pull node:18-slim

# 拉取完之后查看镜像
docker images

5.在/docker/compose下创建docker-compose.yml配置文件,注意(需要将下文提到的端口加入安全组)。确保挂载文件权限是777

version: '3.8'

networks:
  common-network:
    driver: bridge

services:                                      # 容器
  docker_jenkins:
    image: jenkins/jenkins:lts                 # 使用的镜像
    container_name: jenkins                    # 容器名称
    user: root                                 # root权限
    restart: unless-stopped                    # 更安全的重启策略
    environment:
      - TZ=Asia/Shanghai
      - "JENKINS_OPTS=--prefix=/jenkins_home" ## 自定义 jenkins 访问前缀(上下文context)
    ports:                                     # 对外暴露的端口定义
      - "8080:8080"
      - "50000:50000"
    volumes:                                   # 卷挂载路径
      - '/usr/bin/docker:/usr/bin/docker'
      - '/root/store/jenkins_home/:/var/jenkins_home'     # 挂载到容器内的jenkins_home目录
      - '/var/run/docker.sock:/var/run/docker.sock'  # 关键:挂载 Docker 套接字
      - '/usr/libexec/docker/cli-plugins/:/usr/libexec/docker/cli-plugins' # docker 插件挂载
    networks:
      - common-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/jenkins_home" ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

  docker_mysql:                            # MySQL服务
    image: mysql:8.0
    container_name: mysql                  # 容器名称
    restart: unless-stopped                # 更安全的重启策略
    volumes:
      - /root/store/mysql:/var/lib/mysql
    ports:
      - "3306:3306"
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci # 设置默认字符集
    environment:
      MYSQL_DATABASE: xxx
      MYSQL_ROOT_PASSWORD: xxx
      TZ: Asia/Shanghai  # 设置时区为东八区(北京时间)
    networks:
      - common-network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p123456"]
      interval: 30s
      timeout: 10s
      retries: 3

  docker_redis:
    image: redis:6.2                       # 指定具体版本号
    container_name: redis                  # 容器名称
    restart: unless-stopped                # 更安全的重启策略
    volumes:
      - /root/store/redis:/data
      - /root/store/redis/redis.conf:/usr/local/etc/redis/redis.conf  # 添加配置文件挂载
    ports:
      - "6379:6379"
    command: redis-server --appendonly yes --protected-mode no  # 禁用保护模式
    environment:
      TZ: Asia/Shanghai  # 设置时区为东八区(北京时间)
    networks:
      - common-network
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 30s
      timeout: 10s
      retries: 3

  docker_minio:
    image: bitnami/minio:latest
    container_name: minio                  # 容器名称
    restart: unless-stopped                # 更安全的重启策略
    user: root                             # 使用root用户运行容器
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - /root/store/minio:/data            # 修改挂载路径
    environment:
      TZ: Asia/Shanghai  # 设置时区为东八区(北京时间)
      MINIO_ROOT_USER: guang
      MINIO_ROOT_PASSWORD: dongdong
      MINIO_DOMAIN: xxx
      MINIO_SERVER_URL: xxx
      MINIO_CONSOLE_ADDRESS: ":9001"
      BITNAMI_DEBUG: "true"                # 添加调试信息
    command: /opt/bitnami/minio/bin/minio server /data
    networks:
      - common-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 10s
      retries: 3

6.启动环境

docker compose up -d

# 查看镜像
docker compose ps -a

7.验证Jenkins,浏览器输入服务器地址:8080/jenkins_home。会提示要输入密码,密码位于store/jenkins_home/secrets/initialAdminPassword。登录后,选择安装推荐的插件。

二、Jenkins 自动化部署配置

1.在首页->系统管理->插件管理->Available plugins中搜索Publish Over SSHNodeJSGitee,安装后重启。

2.在首页->系统管理->系统配置中找到SSH Servers点击下面的新增,填入系统名称、IP、用户名、登录后访问的地址。再点开高级->勾选Use password authentication, or use a different key之后填入密码,端口使用默认的22就行。点击应用再点击保存。

3.在首页->系统管理->系统配置中配置Gitee参考

4.创建任务 点击首页中的 ‘新建任务’,输入项目名称:xxx,选择构建一个自由风格的软件项目,点击确定。点击‘源码管理’选择‘git’,配置远程仓库(必须是公开的)、刚刚的凭据、分支。点击应用保存。 之后点击‘立即构建’。

5.GitHub webHooks配置参考

6.在任务->配置->构建触发器中选择Gitee webhook。在构建环境中选择Provide Node & npm bin/ folder to PATH。在构建步骤中选择shell,输入自己要执行的命令。

最后 本文待优化(当前仅限个人使用)