跳至主要內容

服务器基础环境配置

Cactus li...大约 17 分钟devopsdevops

Ubuntu 22 安装 JDK 17

在浏览器输入:Java Downloads | Oracleopen in new window,选择 jdk17 进行下载。

image-20230920164316099
image-20230920164316099

把下载完完成的 jdk-17_linux-x64_bin.tar.gz 包通过 ssh 客户端中 ftp 模块上传至服务器 /usr/local/src 目录下 。

image-20230920171314313
image-20230920171314313

解压压 jdk 文件到指定目录下

root@segen-virtual-machine:/usr/local/src# tar -zxf $PWD/jdk-17_linux-x64_bin.tar.gz -C /usr/local/
image-20230920172124024
image-20230920172124024

配置环境

使用如下命令打开文件

root@segen-virtual-machine:/usr/local# vim ~/.bashrc

如果vim 打不开先 安装vim编辑器

root@segen-virtual-machine:/usr/local# apt-get install vim

使用命令sudo vim ~/.bashrc,然后在文件末尾添加如下内容:

export JAVA_HOME=/usr/local/jdk-17.0.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

最后保存。输入以下命令, 令系统配置文件.bashrc立即生效 :source ~/.bashrc

在终端输入 java -version 出现如下信息代表 java 环境配置正确

root@segen-virtual-machine:/usr/local/jdk-17.0.8# java -version
java version "17.0.8" 2023-07-18 LTS
Java(TM) SE Runtime Environment (build 17.0.8+9-LTS-211)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.8+9-LTS-211, mixed mode, sharing)

Ubuntu 22 安装 docker

卸载旧版本

在安装 Docker 引擎之前,您必须首先确保任何 将卸载冲突的软件包。

root@segen-virtual-machine:/opt# for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

安装 docker 脚本

  1. 设置 Docker 的 Apt 存储库。

    # Add Docker's official GPG key:
    sudo apt-get update
    sudo apt-get install ca-certificates curl gnupg
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg
    
    # Add the repository to Apt sources:
    echo \
      "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
    
  2. 安装 Docker 软件包。

    root@segen-virtual-machine:/opt#  apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
  3. 通过运行 docker version 引擎安装是否成功,如果出现以下内容代表安装成功。

    Client: Docker Engine - Community
     Version:           24.0.6
     API version:       1.43
     Go version:        go1.20.7
     Git commit:        ed223bc
     Built:             Mon Sep  4 12:31:44 2023
     OS/Arch:           linux/amd64
     Context:           default
    
    Server: Docker Engine - Community
     Engine:
      Version:          24.0.6
      API version:      1.43 (minimum version 1.12)
      Go version:       go1.20.7
      Git commit:       1a79695
      Built:            Mon Sep  4 12:31:44 2023
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.6.24
      GitCommit:        61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
     runc:
      Version:          1.1.9
      GitCommit:        v1.1.9-0-gccaecfc
     docker-init:
      Version:          0.19.0
    

在 opt 目录下创建 shell 脚本把上面的脚本进行统一运行

# 使用touch命令创建一个空文件
root@segen-virtual-machine:/opt# touch ubuntu22_docker_install.sh
# 使用chmod命令赋予文件执行权限
root@segen-virtual-machine:/opt# chmod +x ubuntu22_docker_install.sh

完整脚本内容如下 ubuntu22_docker_install.sh

#!/bin/bash
# 这个脚本用于在Ubuntu上安装Docker

# 添加Docker的官方GPG密钥:
apt-get update
apt-get install ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

# 将仓库添加到Apt源中:
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update

# 安装Docker及相关组件:
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 查看 Docker 版本信息:
docker  version

离线安装docker

参考Docker官方文档:
Install Docker Engine on Ubuntu | Docker Documentation
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install.
https://docs.docker.com/engine/install/ubuntu/open in new window

1.访问下列链接,选择对应的Ubuntu版本:

https://download.docker.com/linux/ubuntu/dists/open in new window

2.访问问 pool/stable/ ,然后选择对应的CPU架构 (amd64, armhf, arm64, or s390x),如Ubuntu 22.04 amd64链接:Index of linux/ubuntu/dists/jammy/pool/stable/amd64/open in new window

3.下载下列dep文件

  • containerd.io_<version>_<arch>.deb
  • docker-ce_<version>_<arch>.deb
  • docker-ce-cli_<version>_<arch>.deb
  • docker-buildx-plugin_<version>_<arch>.deb
  • docker-compose-plugin_<version>_<arch>.deb

4.使用下列命令安装

$ sudo tar -zxvf Ubuntu22_Docker_离线安装包.tar
$ sudo dpkg -i ./containerd.io_<version>_<arch>.deb \
  ./docker-ce_<version>_<arch>.deb \
  ./docker-ce-cli_<version>_<arch>.deb \
  ./docker-buildx-plugin_<version>_<arch>.deb \
  ./docker-compose-plugin_<version>_<arch>.deb

5.启动docker

$ sudo service docker start

6.设置docker自动启动

$ systemctl enable docker.service

7.同步本地时间

  1. 更新系统时间:

    $ sudo timedatectl set-ntp on
    

    这会启用网络时间协议(NTP)同步,使系统自动从网络服务器获取时间。

  2. 选择上海时区:

    $ sudo timedatectl set-timezone Asia/Shanghai
    

    这会将系统时区设置为上海。

  3. 检查时间和时区设置:

    $ timedatectl
    

    确保输出中的 "Time zone" 显示为 "Asia/Shanghai"。

这样,你的系统时间就会被同步到上海的时间,并且自动与 NTP 服务器同步。

请注意,这些操作需要管理员权限,因此可能需要使用 sudo 命令执行。如果系统上尚未安装 NTP,你可能需要首先安装它,可以使用以下命令:

$ sudo apt update
$ sudo apt install -y ntp

上述命令将确保 NTP 工具安装在系统上,然后你可以执行同步时间的步骤。

配置镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "500m",
    "max-file": "3"
  },
  "registry-mirrors": ["https://avz7ojgz.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

daemon.json文件中添加log-driverlog-opts参数,设置max-sizemax-file。例如,设置单个日志文件的最大大小为500MB,并且最多保留3个日志文件

docker容器时区修改

复制宿主机下面的zoneinfo文件到容器内

docker cp /usr/share/zoneinfo/ aca1a3850163:/usr/share/

进去容器

docker exec -it nstr-minio /bin/bash

在容器内设置时区,不用重启容器即可更改时间时区设置

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cho "Asia/Shanghai" > /etc/timezone
date
Tue Mar 15 16:47:19 CST 2022

安装开发环境

创建容器需要挂载的目录和文件

root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/jenkins
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/gogs
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/mysql/conf
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/mysql/data
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/nginx
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/redis
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/nacos
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/seata
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/xxl-job
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/es
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/mq
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/gitlab-data/config
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/gitlab-data/logs
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/gitlab-data/data

创建 mysql 配置文件:vim /usr/local/dockerdata/mysql/conf/my.cnf

[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1010
innodb_fast_shutdown=1

编写 docker-compose.yml 文件

# 使用 sudo 权限以管理员身份执行命令,并使用 tee 命令将数据写入文件
sudo tee /usr/local/dockerdata/docker-compose.yml <<-'EOF'
services:
  mysql:
    image: mysql:8.0.34
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: Nstr.234808
    volumes:
      - "/usr/local/dockerdata/mysql/conf:/etc/mysql/conf.d"
      - "/usr/local/dockerdata/mysql/data:/var/lib/mysql"
    restart: always
    networks:
      - new
  gogs:
    image: gogs/gogs:0.13
    container_name: gogs
    ports:
      - "20022:22"
      - "3001:3000"
    environment:
      TZ: Asia/Shanghai
    volumes:
      - "/usr/local/dockerdata/gogs:/data"
    networks:
      - new
    restart: always
    depends_on:
      - mysql
  jenkins:
    image: jenkins/jenkins:2.414.2-lts-jdk17
    container_name: jenkins
    ports:
      - "2080:8080"
      - "50000:50000"
    environment:
      - "JAVA_OPTS=-server -Xms1024m -Xmx1024m -XX:MetaspaceSize=100m -XX:MaxMetaspaceSize=512m"
    volumes:
      - "/usr/local/dockerdata/jenkins:/var/jenkins_home"
      - "/usr/bin/docker:/usr/bin/docker"
      - "/var/run/docker.sock:/var/run/docker.sock"
    restart: always
    networks:
      - new
networks:
  new:
    name: segen
EOF

编写完成后运行docker compose up -d命令来启动应用容器,成功启动后 使用 docker compose ps 查看容器是否运行正常,如果启动正常会出现如图所示内容。

image-20230921162039463
image-20230921162039463

docker compose 一些常用命令

  1. docker-compose up -d:启动应用程序,创建并启动所有定义在 docker-compose.yml 文件中的容器。
  2. docker-compose down:停止并删除所有与应用程序相关的容器、网络和卷。通常与 up 配对使用,用于关闭应用程序。
  3. docker-compose build:根据 Dockerfile 构建应用程序所需的镜像。这个命令通常在修改了 Dockerfile 或其他构建上下文内容后使用。
  4. docker-compose ps:列出与应用程序关联的容器的状态信息,如容器 ID、名称、状态、端口映射等。
  5. docker-compose logs:查看应用程序中所有容器的日志输出。可以使用 -f 参数来实时监视日志。
  6. docker-compose exec:在运行中的容器中执行命令。例如:docker-compose exec <service-name> <command>
  7. docker-compose scale:用于扩展指定服务的容器数量。例如:docker-compose scale <service-name>=3 将服务的容器数量扩展为 3 个。
  8. docker-compose down -v:停止并删除容器,同时删除关联的数据卷。
  9. docker-compose restart:重新启动已经运行的服务。
  10. docker-compose pull:从容器仓库拉取最新的镜像版本。
  11. docker-compose config:验证 docker-compose.yml 文件的语法,并将其解析成 Compose 文件的配置信息。

这些是一些常见的 Docker Compose 命令,可以帮助你管理容器化应用程序的生命周期。你可以通过运行 docker-compose --help 命令来查看更多的命令选项和详细信息。

容器都正常启动后首先配置 gogs

访问:http://192.168.1.19:10880/open in new window 安装页面,这里ip 替换成你的虚拟机的ip。

image-20230921164829752
image-20230921164829752
配置数据库

首先创建DataBase,并设置字符集utf8_general_ci。为了安全可以创建单独的用户用于处理gogs服务。

# 创建一个名为 "gogs" 的数据库,使用 UTF-8 字符集
CREATE DATABASE gogs CHARACTER SET utf8;

# 创建一个名为 "gogs" 的数据库用户,该用户只可以从任何 IP 地址进行访问,并设置密码为 "Nstr.gogs808"
CREATE USER 'gogs'@'%' IDENTIFIED BY 'Nstr.gogs808';

# 授予用户 "gogs" 从 IP 地址 % 访问数据库的所有权限
GRANT ALL PRIVILEGES ON *.* TO 'gogs'@'%';

# 刷新数据库权限,以使新的权限设置立即生效
FLUSH PRIVILEGES;

配置数据库主机、用户名、密码等信息.

image-20230921172222258
image-20230921172222258
应用基本配置

应用基本设置只需要修改运行系统用户、域名、应用URL,其它采用默认值。

image-20230921173134003
image-20230921173134003
设置管理员账号

配置管理员账号,让自己有所有权限。

创建仓库

用户可以创建新的仓库

image-20230921174049065
image-20230921174049065
image-20230921174434886
image-20230921174434886
image-20230921174503908
image-20230921174503908
创建密钥

用户要将仓库下载到本地,这需要配置密钥,具体操作如下:

# 如果本地之前创建过密钥直接运行(cat ~/.ssh/*.pub)
ssh-keygen -t rsa -b 4096 -C "w****@163.com"
# 一路回车
cd ~/.ssh/
cat id_rsa.pub
# 将密钥添加到gogs上

#跟踪连接远程仓库的信息
ssh -vT [email protected] -p 20022
image-20230921175259260
image-20230921175259260
image-20230921175406933
image-20230921175406933
image-20230921175504997
image-20230921175504997
克隆仓库

把刚刚创建好的仓库克隆到本地:

# 克隆远程仓库方式
git clone http://192.168.1.19:3001/segen/sgtest.git
cd sgtest
touch README.md
git add README.md
git commit -m "first commit"
git push -u origin master
# 本地关联远程仓库方式
touch README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin http://192.168.1.19:3001/segen/sgtest.git
git push -u origin master
image-20230922092007894
image-20230922092007894

部署配置 gitlab

首先创建 gitlab 需要挂载到本地的文件目录。

root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/gitlab-data/config
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/gitlab-data/logs
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/gitlab-data/data

编写 docker compose 文件,使用 docker compose up -d gitlab 启动 gitlab 容器,docker ps 查看容器是否成功启动。

sudo tee /usr/local/dockerdata/docker-compose.yml <<-'EOF'
services:
  mysql:
    image: mysql:8.0.34
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: Nstr.234808
    volumes:
      - "/usr/local/dockerdata/mysql/conf:/etc/mysql/conf.d"
      - "/usr/local/dockerdata/mysql/data:/var/lib/mysql"
    restart: always
    networks:
      - new
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    hostname: '192.168.1.19'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.1.19:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        gitlab_rails['backup_keep_time'] = 259200
    ports:
      - '8929:8929'
      - '2224:22'
    volumes:
      - /usr/local/dockerdata/gitlab-data/config:/etc/gitlab
      - /usr/local/dockerdata/gitlab-data/logs:/var/log/gitlab
      - /usr/local/dockerdata/gitlab-data/data:/var/opt/gitlab'
    shm_size: '256m'
    restart: always
    networks:
      - new 
  jenkins:
    image: jenkins/jenkins:2.414.2-lts-jdk17
    container_name: jenkins
    ports:
      - "2080:8080"
      - "50000:50000"
    environment:
      - "JAVA_OPTS=-server -Xms1024m -Xmx1024m -XX:MetaspaceSize=100m -XX:MaxMetaspaceSize=512m"
    volumes:
      - "/usr/local/dockerdata/jenkins:/var/jenkins_home"
      - "/usr/bin/docker:/usr/bin/docker"
      - "/var/run/docker.sock:/var/run/docker.sock"
    restart: always
    networks:
      - new
networks:
  new:
    name: segen
EOF
image-20230925095938252
image-20230925095938252

在浏览器输入:http://192.168.1.19:8929/open in new window 访问 gitlab 的 web 界面。

然后登录管理员账号,查看初始化的管理员账号密码:cat /usr/local/dockerdata/gitlab-data/config/initial_root_password

image-20230925100325814
image-20230925100325814
新用户注册
image-20230925095531230
image-20230925095531230
image-20230925103513459
image-20230925103513459

注册完成后需要登录管理员账号进行用户的审核

image-20230925103613099
image-20230925103613099
image-20230925103653752
image-20230925103653752
image-20230925103740824
image-20230925103740824

等管理员审批通过后就可以直接登录了。

image-20230925103925878
image-20230925103925878
配置公钥

登录完成后把本地 公钥添加到自己的账户里,方便克隆提交项目代码或文件。

image-20230925104321903
image-20230925104321903
image-20230925104417399
image-20230925104417399

查询或生成密钥的具体操作如下:

# 如果本地之前创建过密钥直接运行(cat ~/.ssh/*.pub)
ssh-keygen -t rsa -b 4096 -C "w****@163.com"
# 一路回车
cd ~/.ssh/
cat id_rsa.pub
# 将密钥添加到 gitlba 上

创建项目

密钥成功添加后,接下来开始创建项目。关联项目,测试拉取和提交代码。

image-20230925105027968
image-20230925105027968

可以根据自己的实际需求,创建符合新要求的项目,这里我选择创建个空的项目。

image-20230925110606742
image-20230925110606742

Git全局设置

git config --global user.name "xuanfeng li"
git config --global user.email "[email protected]"

创建仓库

git clone ssh://[email protected]:2224/cactusli/segen.git
cd segen
touch README.md
git add README.md
git commit -m "add README"
git push -u origin main
image-20230925111042421
image-20230925111042421
image-20230925111058204
image-20230925111058204

推送一个已有的文件夹

cd existing_folder
git init --initial-branch=main
git remote add origin ssh://[email protected]:2224/cactusli/segen.git
git add .
git commit -m "Initial commit"
git push -u origin main

推送一个现有的Git存储库

cd existing_repo
git remote rename origin old-origin
git remote add origin ssh://[email protected]:2224/cactusli/segen.git
git push -u origin --all
git push -u origin --tags

root 密码忘记使用脚本一键更新

#!/bin/bash

# 替换为你的 GitLab 容器 ID
GITLAB_CONTAINER_ID=f7cad737731d

# 在容器中运行 Rails 控制台,并执行密码重置操作
docker exec -it $GITLAB_CONTAINER_ID /bin/bash -c 'gitlab-rails console <<EOF
user = User.where(id: 1).first
new_password = "Nstr.@#$%^&*808"
user.password = new_password
user.password_confirmation = new_password
user.save!
exit
EOF'

# 重新启动 GitLab 容器
docker restart $GITLAB_CONTAINER_ID

echo "新密码已生成:$new_password"

安装配置 jenkins

首先在服务器创建 jenkins 用户,然后赋予相应的权限。
# useradd 命令用于创建新用户,-U 选项表示不要创建与用户名相同的用户组,-m 表示创建用户的家目录
# 这个命令创建了一个名为 "jenkins" 的用户,不会创建与其同名的用户组,并在家目录中存储用户文件
useradd -U -m jenkins

# usermod 命令用于修改用户属性,-aG 选项用于将用户添加到指定的附加组
# 这个命令将用户 "jenkins" 添加到 "docker" 附加组中
# 这通常用于允许用户执行Docker相关的操作
usermod -aG docker jenkins

# 这个命令将用户 "jenkins" 添加到 "root" 附加组中
# 添加用户到 "root" 附加组通常是不推荐的,因为它会给予用户超级用户权限,潜在的安全风险
usermod -aG root jenkins

# chmod 命令用于更改文件或目录的权限,777 表示最大的权限,即读取、写入和执行权限
# 这个命令将文件 /var/run/docker.sock 的权限设置为最大,允许任何用户对其进行读取、写入和执行操作
# 这样的权限设置可能会存在安全风险,请小心使用,并确保只允许信任的用户或进程访问这个文件
chmod 777 /var/run/docker.sock
创建 jenkins 需要挂载到本地的文件目录。
root@segen-virtual-machine:/usr/local/dockerdata# mkdir -p /usr/local/dockerdata/jenkins

编写 docker compose 文件,使用 docker compose up -d jenkins 启动 jenkins 容器,docker ps 查看容器是否成功启动。

sudo tee /usr/local/dockerdata/docker-compose.yml <<-'EOF'
services:
  mysql:
    image: mysql:8.0.34
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: Nstr.234808
    volumes:
      - "/usr/local/dockerdata/mysql/conf:/etc/mysql/conf.d"
      - "/usr/local/dockerdata/mysql/data:/var/lib/mysql"
    restart: always
    networks:
      - new
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    hostname: '192.168.1.19'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.1.19:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        gitlab_rails['backup_keep_time'] = 259200
    ports:
      - '8929:8929'
      - '2224:22'
    volumes:
      - /usr/local/dockerdata/gitlab-data/config:/etc/gitlab
      - /usr/local/dockerdata/gitlab-data/logs:/var/log/gitlab
      - /usr/local/dockerdata/gitlab-data/data:/var/opt/gitlab'
    shm_size: '256m'
    restart: always
    networks:
      - new 
  jenkins:
    image: jenkins/jenkins:2.414.2-lts-jdk17
    container_name: jenkins
    ports:
      - "2080:8080"
      - "50000:50000"
    environment:
      - "JAVA_OPTS=-server -Xms1024m -Xmx1024m -XX:MetaspaceSize=100m -XX:MaxMetaspaceSize=512m"
    volumes:
      - "/usr/local/dockerdata/jenkins:/var/jenkins_home"
      - "/usr/bin/docker:/usr/bin/docker"
      - "/var/run/docker.sock:/var/run/docker.sock"
    restart: always
    networks:
      - new
networks:
  new:
    name: segen
EOF

如图所示 jenkins 成功启动

如图所示 jenkins 成功启动

image-20230925112114344
image-20230925112114344
新手入门

浏览器访问(ip:port),出现这个界面说明安装成功,查看Jenkins密码进行下一步。

image-20230925112911075
image-20230925112911075
image-20230925150954722
image-20230925150954722

创建用户

image-20230925151108740
image-20230925151108740

保存实例

image-20230925151203230
image-20230925151203230

进入Jenkins 后台管理系统

image-20230925164237110
image-20230925164237110
汉化插件安装
  1. 缓存插件列表

    点击Manage Jenkins --》 Manage Plugins --》Available 等待浏览器加载完成。(这样做是为了把Jenkins官方的插件列表下载到本地)

    image-20230925164557413
    image-20230925164557413
  2. 安装汉化插件

    image-20230925165106789
    image-20230925165106789
  3. 重启 jenkins 使用命令docker compose restart jenkins ,此命令一定要在有 docker-compose.yml 目录下运行。
    image-20230925170357873

实现前端自动化部署

实现 vue3 项目的自动化打包部署。

安装 jenkins 插件

选择:Dashboard 》系统管理 》 插件管理 》Available plugins;

搜索安装部署需要的插件 如:gitlabPublish Over SSHnodejs

image-20230926101300694
image-20230926101300694
image-20230926102006076
image-20230926102006076

软件配置

image-20230926103718472
image-20230926103718472
image-20230926153835689
image-20230926153835689

在系统管理中的全局工具配置里,可以把Maven、Gradle、NodeJ、Git 的环境都选一下,勾选自动安装。但这里有个小坑,就是点击保存后并不会直接下载安装,而是使用触发的时候才会。比如Maven需要再新建Job中选择Maven选项才会自动下载;Node的话则需要勾选这个选项才会自动下载。

创建任务

项目配置

image-20230926111821912
image-20230926111821912

源码管理这里选择Git,然后将我们的Gitlab的项目地址放上去,Credentials里添加一个Gitlab的用户名密码。

image-20230926111856214
image-20230926111856214

然后我们勾上这个Build when a change is pushed to Gitlab选项,后面这个URL拷贝一下。

image-20230926111927852
image-20230926111927852
image-20230926112101315
image-20230926112101315

将上面的URL拷贝到Gitlab中,点击Webhook:

image-20230926112337868
image-20230926112337868

如果出现这种错误提示,修改修改gitlab 的网络策略: Admin -> Settings -> Network -> Outbound Requests -> Allow requests to the local network from hooks and services(勾选上)

image-20230926112548422
image-20230926112548422

添加后,我们就可以在这里看到了该Hook,我们可以点击Test测试一下。如果出现如图所示提示的错误,则需要在Jenkins里设置一下安全策略,勾选以下按钮:

image-20230926112806978
image-20230926112806978
image-20230926113003966
image-20230926113003966
image-20230926142345338
image-20230926142345338
image-20230926142431043
image-20230926142431043
image-20230926142709056
image-20230926142709056
image-20230926143746226
image-20230926143746226

最后,我们编写一下需要Jenkins拿到这个事件后,执行什么。我们在构建里,添加执行Shell:

image-20230926154918873
image-20230926154918873
docker rm -f pure-admin-thin
sleep 1
docker rmi -f pure-admin-thin:1.0
sleep 1
docker build -t pure-admin-thin:1.0 -f ./Dockerfile .
sleep 1
docker run -d -p 8032:80 --name pure-admin-thin pure-admin-thin:1.0

在控制台里我们可以看到具体的执行信息,其实和我们在Linux上敲命令是一样的,出啥错解决啥就可以了。

删除任务的构建历史

进入 “Dashboard --> 系统管理 --> Script Console” 输入清理构建记录的脚本内容:

item = Jenkins.instance.getItemByFullName("your-job-name-here") // 替换成自己 JOB 名称
//THIS WILL REMOVE ALL BUILD HISTORY
item.builds.each() { build ->
  build.delete()
}
item.updateNextBuildNumber(1)
services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
    restart: always
    networks:
      - new
  nacos:
    image: nacos/nacos-server:v2.1.0-slim
    container_name: nacos
    environment:
      - MODE=standalone
      - JVM_XMS=512m
      - JVM_XMX=512m
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=123
      - MYSQL_SERVICE_DB_NAME=nacos
      - SPRING_DATASOURCE_PLATFORM=mysql
    ports:
      - "8848:8848"
    restart: always
    depends_on:
      - mysql
    networks:
      - new
  xxl-job:
    image: xuxueli/xxl-job-admin:2.3.0
    container_name: xxljob
    ports:
      - "8880:8880"
    volumes:
      - "./xxl-job/logs:/data/applogs"
      - "./xxl-job/application.properties:/config/application.properties"
    networks:
      - new
    restart: always
    depends_on:
      - mysql
  seata:
    image: seataio/seata-server
    container_name: seata
    ports:
      - "8099:8099"
      - "7099:7099"
    environment:
      SEATA_IP: 192.168.150.101
    volumes:
      - "./seata:/seata-server/resources"
    networks:
      - new
    restart: always
    depends_on:
      - mysql
      - nacos
  gogs:
    image: gogs/gogs:0.12
    container_name: gogs
    ports:
      - "10022:22"
      - "10880:3000"
    environment:
      TZ: Asia/Shanghai
    volumes:
      - "./gogs:/data"
    networks:
      - new
    restart: always
    depends_on:
      - mysql
  jenkins:
    image: jenkins/jenkins:2.361.1-lts-jdk11
    container_name: jenkins
    ports:
      - "18080:8080"
      - "50000:50000"
    environment:
      - "JAVA_OPTS=-server -Xms1024m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m"
    volumes:
      - "./jenkins:/var/jenkins_home"
      - "/usr/bin/docker:/usr/bin/docker"
      - "/var/run/docker.sock:/var/run/docker.sock"
    restart: always
    networks:
      - new
  mq:
    image: rabbitmq:3.8-management
    container_name: mq
    hostname: mq
    ports:
      - "15672:15672"
      - "5672:5672"
    environment:
      RABBITMQ_DEFAULT_USER: tjxt
      RABBITMQ_DEFAULT_PASS: 123321
    volumes:
      - "./mq/plugins:/plugins"
      - "./mq/data:/var/lib/rabbitmq"
      - "./mq/conf:/etc/rabbitmq"
    restart: always
    networks:
      - new
  es:
    image: elasticsearch:7.12.1
    container_name: es
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.type=single-node"
    volumes:
      - "./es/data:/usr/share/elasticsearch/data"
      - "./es/plugins:/usr/share/elasticsearch/plugins"
    restart: always
    networks:
      - new
  redis:
    image: redis
    container_name: redis
    ports:
      - "6379:6379"
    volumes:
      - "./redis/conf:/usr/local/etc/redis"
      - "./redis/data:/tmp"
    networks:
      - new
    restart: always
    entrypoint: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - "./nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/etc/nginx/html"
    restart: always
    networks:
      - new
networks:
  new:
    name: tjxt
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3