Debian Jenkins部署的自动化脚本有哪些
导读:Debian上Jenkins自动化部署常用脚本与示例 脚本类型与适用场景 Bash 安装脚本:一键在 Debian 上安装 Java 11、添加 Jenkins APT 源、安装并启动 Jenkins,适合快速搭建 CI/CD 环境。 J...
Debian上Jenkins自动化部署常用脚本与示例
脚本类型与适用场景
- Bash 安装脚本:一键在 Debian 上安装 Java 11、添加 Jenkins APT 源、安装并启动 Jenkins,适合快速搭建 CI/CD 环境。
- Jenkinsfile 流水线脚本:定义 拉取代码 → 构建 → 测试 → 部署 全流程,支持从 SCM 加载,便于版本化管理与复用。
- 部署脚本:包括本地或远程 SSH 部署 JAR、Docker 镜像构建与推送、以及 备份与回滚 等常见生产动作。
Bash 一键安装脚本
- 作用:自动安装 OpenJDK 11、导入 Jenkins GPG 密钥、添加官方仓库、安装 Jenkins 并启动服务,同时输出初始管理员密码路径。
- 示例脚本(保存为 install_jenkins.sh):
#!/usr/bin/env bash
set -e
sudo apt-get update
sudo apt-get install -y openjdk-11-jdk wget gnupg2 software-properties-common
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list >
/dev/null
sudo apt-get update
sudo apt-get install -y jenkins
sudo systemctl enable --now jenkins
echo "Jenkins 初始管理员密码路径:/var/lib/jenkins/secrets/initialAdminPassword"
- 使用要点:
- 执行:chmod +x install_jenkins.sh & & sudo ./install_jenkins.sh
- 防火墙放行:sudo ufw allow 8080/tcp
- 生产建议:修改默认端口并配置 SSL/TLS。
Jenkinsfile 流水线脚本
- 作用:以代码方式编排 拉取代码 → 运行测试 → 构建打包 → 部署,可从 Git 仓库加载,便于团队协作与审计。
- 示例(多语言/多场景通用):
pipeline {
agent any
environment {
JAVA_HOME = '/usr/lib/jvm/java-11-openjdk-amd64'
MAVEN_OPTS = '-Dmaven.test.failure.ignore=true'
}
stages {
stage('拉取代码') {
steps {
git branch: 'main', url: 'https://github.com/your-org/your-repo.git' }
}
stage('运行测试') {
steps {
sh 'python -m pytest tests/' }
// 其他语言可替换为相应测试命令
}
stage('构建打包') {
steps {
sh 'mvn -B -DskipTests clean package' }
// Node 可用 npm/yarn,Go 可用 go build
}
stage('部署') {
steps {
sh './deploy.sh' }
// 可替换为 SSH 或 Docker 部署步骤
}
}
post {
always {
echo "构建完成:${
currentBuild.fullDisplayName}
"
// mail to: 'team@example.com', subject: "构建完成", body: "..."
}
failure {
echo "构建失败,请查看日志:${
env.BUILD_URL}
"
}
}
}
- 使用要点:
- 在任务中选择 Pipeline script from SCM,指定仓库与 Jenkinsfile 路径。
- 通过 Credentials Binding 管理密钥与敏感变量。
部署脚本示例
- SSH 远程部署 JAR(在目标机上执行或经 sshPublisher 调用)
#!/usr/bin/env bash
set -e
JAR_NAME="app.jar"
APP_DIR="/opt/app"
LOG_FILE="$APP_DIR/app.log"
# 备份旧包
[ -f "$APP_DIR/$JAR_NAME" ] &
&
mv "$APP_DIR/$JAR_NAME" "$APP_DIR/${
JAR_NAME}
.bak.$(date +%F-%H%M%S)"
# 停止旧进程(按端口或进程名)
PID=$(ps -ef | grep "$JAR_NAME" | grep -v grep | awk '{
print $2}
')
if [ -n "$PID" ];
then
kill -9 "$PID" || true
sleep 3
fi
# 启动新版本
nohup java -jar "$APP_DIR/$JAR_NAME" --spring.profiles.active=prod >
"$LOG_FILE" 2>
&
1 &
echo "已启动 $JAR_NAME,日志:$LOG_FILE"
- Docker 构建与远程部署(Jenkins 节点需能执行 docker 命令)
#!/usr/bin/env bash
set -e
IMAGE="your-registry/your-app:${
BUILD_NUMBER}
"
CONTAINER="your-app"
# 构建镜像
docker build -t "$IMAGE" .
# 推送镜像(需先在 Jenkins 配置 Docker Hub 凭据)
docker push "$IMAGE"
# 远程部署
ssh user@target "
docker pull $IMAGE
docker stop $CONTAINER || true
docker rm $CONTAINER || true
docker run -d --name $CONTAINER -p 8080:8080 $IMAGE
"
- 备份与清理脚本(配合构建后归档/回滚)
#!/usr/bin/env bash
set -e
BAK_DIR="/opt/backups/jar/$(date +%F)"
mkdir -p "$BAK_DIR"
# 备份产物
cp target/*.jar "$BAK_DIR/"
# 清理 10 天前的备份
find /opt/backups/jar/ -type f -mtime +10 -delete
- 使用要点:
- 远程执行可通过 sshPublisher 或 sshagent + ssh 完成。
- 若 Jenkins 使用 Docker,需将 jenkins 用户加入 docker 组并重启服务。
触发与通知配置要点
- 代码触发:在 GitHub/GitLab 配置 Webhook,指向 Jenkins 任务;Jenkins 侧启用对应触发器(如 GitHub hook trigger 或 GitLab webhook)。
- 轮询触发:在 Freestyle 任务中使用 Poll SCM(如 H/5 * * * * 每 5 分钟检查一次变更)。
- 通知:在 post 阶段使用 mail 步骤或企业微信/钉钉 Webhook 发送构建结果。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian Jenkins部署的自动化脚本有哪些
本文地址: https://pptw.com/jishu/771726.html
