一、安装docker
-
删除错误的 repo
-
sudo rm -f /etc/yum.repos.d/docker-ce.repo -
使用官方 Docker repo
-
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -
换国内镜像源
-
sudo sed -i 's#https://download.docker.com/linux/centos#http://mirrors.aliyun.com/docker-ce/linux/centos#g' /etc/yum.repos.d/docker-ce.repo -
清理缓存并重新安装
-
sudo dnf clean all sudo dnf makecache sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -
开机启动
-
sudo systemctl enable --now docker
二、安装Jenkins
-
更改成国内的源
-
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://mirror.ccs.tencentyun.com", "https://hub-mirror.c.163.com", "https://registry.docker-cn.com" ] } EOF -
重启docker
-
sudo systemctl daemon-reexec sudo systemctl restart docker -
执行安装命令
docker pull jenkins/jenkins:lts -
当有success输出时,证明成功了。也可以通过
docker images来查看本地镜像列表。
三、配置Jenkins
1. 安装Jenkins
-
创建 Jenkins 数据目录
-
sudo mkdir -p /var/jenkins_home sudo chown -R 1000:1000 /var/jenkins_home sudo chmod -R 700 /var/jenkins_home -
第一次启动 Jenkins 容器
-
docker run -d \ --name jenkins \ -u 0 \ --restart=always \ -p 8080:8080 \ -p 50000:50000 \ -v /var/jenkins_home:/var/jenkins_home \ -v /data/web_builds:/data/web_builds \ jenkins/jenkins:lts参数解释:
-
-d→ 后台运行 -
--name jenkins→ 容器名字叫 jenkins -
--restart=always表示:- Docker 启动时自动启动 Jenkins 容器;
- Jenkins 容器异常退出时自动重启;
- 只有手动
docker stop jenkins才不会自动重启。 -p 8080:8080→ 映射 Web UI 端口
-
-p 50000:50000→ 代理端口(Jenkins Agent 用的) -
-v /var/jenkins_home:/var/jenkins_home→ 数据持久化 -
-u 0→ 以 root 用户启动(方便安装插件时创建目录权限,之后可以切回 1000 用户)
-
-
停止容器:
docker stop jenkins可以通过
docker ps -a来检查状态。 -
再次启动容器:
docker start jenkins -
获取初始密码
-
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword -
放行8080端口:要记得给服务器的安全组里添加8080。
2. 修改运行在docker的Jenkins的时区:
docker exec -it jenkins bash
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone
之后退出容器,重启Jenkins即可生效。
3. 配置 SSH Username with private key 凭证
需要进入到容器内,创建.ssh文件夹并生成公私钥,拉取 Gitee 主机指纹,之后设置权限。
-
docker exec -it jenkins bash cd /var/jenkins_home mkdir -p .ssh && cd .ssh ssh-keygen -t rsa -b 4096 -C "xxxxxxx@qq.com" ssh-keyscan gitee.com >> known_hosts chmod 700 /var/jenkins_home/.ssh chmod 600 /var/jenkins_home/.ssh/known_hosts需要注意的是,git的仓库地址必须是ssh形式的,比如“git@gitee.com:u-web/vue-mall.git”
4. 重置Jenkins密码
-
进入容器内部
-
docker exec -it jenkins bash -
跳过安全验证
-
编辑 Jenkins 配置文件,禁用安全验证。在
/var/jenkins_home/config.xml里,将<useSecurity>true</useSecurity>改为<useSecurity>false</useSecurity>。 -
vi /var/jenkins_home/config.xml -
之后重启Jenkins
-
docker restart jenkins -
之后进入Jenkins
-
http://你的IP:8080 -
此时无需登录,直接进入 Jenkins 管理后台。之后,依次点击
系统管理 (Manage Jenkins)、全局安全配置 (Configure Global Security),在安全域里选择Jenkins 自身的用户数据库并勾选允许用户注册(这样你就能注册新用户)并保存配置。
⚠️ 修改完毕后记得把
false改回true,重新启用安全验证。-
创建新用户
创建新用户之前,删除
/var/jenkins_home/users/admin_*的目录,不然原先的id将无法注册。回到 Jenkins 首页,点击登录,点击下面的register完成注册,最后使用新注册的账号登录。
-
提升权限
- 登录新账号
- 去:
系统管理 (Manage Jenkins) → 全局安全配置 (Configure Global Security)在 授权策略 (Authorization) 部分,选择
安全矩阵。-
给你的新账号勾选所有权限(特别是
Administer管理员权限) -
保存。
-
关闭“允许用户注册”(可选)
- 出于安全考虑,等新账号创建好后,可以回到 安全配置 把
允许用户注册取消勾选。 - 这样外部用户不能随便注册。
- 出于安全考虑,等新账号创建好后,可以回到 安全配置 把
-
四、安装Nginx
- 先创建文件夹:
mkdir -p /data/web_builds
chmod -R 777 /data/web_builds
之后安装Nginx并启动:
docker run -d \
--name nginx \
--restart=always \
-p 80:80 \
-p 8081-8083:8081-8083 \
-v /data/web_builds:/usr/share/nginx/html:ro \
-v /data/nginx/conf.d:/etc/nginx/conf.d \
nginx:alpine
/data/web_builds:挂载 Jenkins 输出目录(只读:ro)。/data/nginx/conf.d:存放 Nginx 配置文件(持久化)。- Nginx 启动后即可通过
http://宿主机IP访问部署的 Web 项目。
- 在
/data/nginx/conf.d下创建default.conf文件:
# dev 环境:端口 8081
server {
listen 8081;
server_name 120.79.250.121;
root /usr/share/nginx/html/test-jewery/dev;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
# uat 环境:端口 8082
server {
listen 8082;
server_name 120.79.250.121;
root /usr/share/nginx/html/test-jewery/uat;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
# sit 环境:端口 8083(与 80 的默认站点一致,仅便于分环境访问)
server {
listen 8083;
server_name 120.79.250.121;
root /usr/share/nginx/html/test-jewery/sit;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}