在执行部署脚本之前,您需要为 Jenkins 的 jenkins_home
文件夹授予适当的权限。这样可以确保 Jenkins 运行时能正确访问存储和配置文件。
bashchmod -R 755 /data/jenkins
接下来,您需要将文件夹权限设置为用户 1000
,这是 Jenkins 默认的用户 ID。
bashchown -R 1000:1000 /data/jenkins/jenkins_home
接下来是一个完整的 Bash 脚本,用于通过 Docker 部署 Jenkins,并配置 JDK、Maven、Gradle、Node.js 等开发工具。脚本中还包含一些自定义设置,如修改 Jenkins 插件更新源等。
bash#!/bin/bash
# docker部署启动jenkins脚本
############################################################
# 执行脚本前的前置操作
# 1、文件夹授权
# chmod -R 755 /data/jenkins
# 2、文件夹权限授权到用户1000
# chown -R 1000:1000 /data/jenkins/jenkins_home
############################################################
# 创建文件夹,如果存在则略过
curr_dir=$(pwd)
# 初始化秒计数器
SECONDS=0
mkdir -p $curr_dir/jenkins_home
# 授权用户
chown -R 1000:1000 $curr_dir/jenkins_home
# 停止旧容器运行
docker stop jenkins
# 删除旧容器
docker rm jenkins
# 删除旧镜像
docker rmi jenkins/jenkins:jdk21
# 运行新的容器
docker run -itd \
--privileged=true \
--restart=always \
--name jenkins \
-p 28080:8080 \
-p 50000:50000 \
-v /data/java/jdk-11.0.17:/data/java/jdk-11.0.17 \
-v /data/java/jdk-17.0.7:/data/java/jdk-17.0.7 \
-v /data/maven/apache-maven-3.8.6:/data/maven/apache-maven-3.8.6 \
-v /data/gradle/gradle-8.5:/data/gradle/gradle-8.5 \
-v /data/nodejs/node-v16.18.1-linux-x64:/data/nodejs/node-v16.18.1-linux-x64 \
-v $curr_dir/jenkins_home:/var/jenkins_home \
-e JAVA_OPTS="-Xms2048m -Xmx2048m -Duser.timezone=Asia/Shanghai" \
jenkins/jenkins:jdk21
# 检查文件是否存在,如果不存在则等待
while [ ! -f "$curr_dir/jenkins_home/hudson.model.UpdateCenter.xml" ]
do
echo -n '.' # 每秒输出一个点
sleep 1 # 每秒检查一次
done
echo
echo "耗时: $SECONDS 秒"
# 使用sed命令修改文件中的URL
sed -i 's|<url>.*</url>|<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>|' $curr_dir/jenkins_home/hudson.model.UpdateCenter.xml
# 重启 Jenkins 容器
docker restart jenkins
exit 0
创建工作目录和文件夹授权
mkdir -p $curr_dir/jenkins_home
:在当前目录下创建 Jenkins 配置存储文件夹 jenkins_home
,如果该文件夹已存在,则不再创建。chown -R 1000:1000 $curr_dir/jenkins_home
:将该文件夹的权限设置为 Jenkins 默认用户 ID 1000
。停止并删除旧的 Jenkins 容器
docker stop jenkins
:停止已存在的 Jenkins 容器。docker rm jenkins
:删除已停止的 Jenkins 容器。docker rmi jenkins/jenkins:jdk21
:删除已存在的 Jenkins 镜像。拉取并运行新的 Jenkins 容器
docker run
命令使用了以下选项:
--privileged=true
:授予容器特权,允许容器执行一些受限制的操作。--restart=always
:设置容器自动重启策略,确保 Jenkins 在容器崩溃或服务器重启后继续运行。-p 28080:8080
:将宿主机的端口 28080
映射到容器的 Jenkins Web 界面端口 8080
。-p 50000:50000
:用于 Jenkins 主机与代理之间的通信。-v
:映射宿主机的目录到容器中,以便持久化 Jenkins 配置和相关工具,如 JDK、Maven、Gradle 和 Node.js。-e JAVA_OPTS
:设置 Java 参数,指定内存限制和时区设置。等待文件生成并修改更新源
while
循环等待 Jenkins 完成初始化,并确认 hudson.model.UpdateCenter.xml
文件已经生成。sed
命令修改 UpdateCenter.xml
文件中的更新源 URL,将其更改为清华大学镜像源,以加快插件更新速度。重启 Jenkins 容器
docker restart jenkins
:重启 Jenkins 容器,应用更新的配置。确保您已经按照步骤准备好必要的文件夹权限,并且已经安装了 Docker。然后,您可以执行脚本来部署 Jenkins:
bashchmod +x deploy-jenkins.sh
./deploy-jenkins.sh
该脚本将自动部署 Jenkins,并完成初始化设置。执行时会输出部署过程的时间和日志,您可以根据需要进行调试。
完成部署后,您可以通过以下地址访问 Jenkins Web 界面:
http://<your-server-ip>:28080
首次访问时,输入上面脚本中获取的初始管理员密码,配置并安装推荐插件,创建管理员账号,完成 Jenkins 的配置。
通过这个 Bash 脚本,您可以自动化部署 Jenkins,减少手动配置的复杂度。脚本中包括了 Docker 部署 Jenkins 所需的所有步骤,确保您能够快速启动并运行 Jenkins 环境。同时,脚本中也针对国内用户优化了插件更新源,使用清华大学镜像加速 Jenkins 插件的下载速度。
希望这个教程对您有所帮助!