如何自动化centos上的jenkins部署
导读:在 CentOS 上实现 Jenkins 自动化部署 一 架构与准备 部署模式选型 单机一体化:在单台 CentOS 上安装 Jenkins,直接在本机拉代码、构建、部署(适合演示或小规模环境)。 分离式:一台 Jenkins 服务器(...
在 CentOS 上实现 Jenkins 自动化部署
一 架构与准备
- 部署模式选型
- 单机一体化:在单台 CentOS 上安装 Jenkins,直接在本机拉代码、构建、部署(适合演示或小规模环境)。
- 分离式:一台 Jenkins 服务器(可容器化),一台或多台 应用服务器(部署目标),通过 SSH 或 Docker 远程发布(适合生产)。
- 基础环境
- 安装 Java(Jenkins 运行依赖)、Git、Maven(Java 项目)、NodeJS(前端项目)。
- 安装 Docker(可选,用于容器化部署与一致性环境)。
- 安全与权限
- 为 Jenkins 创建专用用户(如 jenkins),配置 sudo 免密仅限于部署脚本所需命令。
- 使用 SSH 密钥 进行代码拉取与远程部署,避免明文口令。
- 防火墙放行 8080(Jenkins Web)、50000(JNLP 代理,如用到)、以及应用端口(如 8081/80/443)。
二 安装与初始化
- 安装 Java(示例为 OpenJDK 11)
- 命令:
sudo yum install -y java-11-openjdk-devel
- 命令:
- 安装与启动 Jenkins(RPM 方式)
- 添加仓库并安装:
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.reposudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.keysudo yum install -y jenkins
- 启动并设置开机自启:
sudo systemctl start jenkinssudo systemctl enable jenkins
- 获取初始管理员密码:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- 访问 http://< 服务器IP> :8080 完成初始化与插件安装。
- 添加仓库并安装:
- 可选 使用 Docker 运行 Jenkins(便于迁移与隔离)
- 启动示例:
docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v /opt/jenkins_home:/var/jenkins_home --restart unless-stopped jenkins/jenkins:lts
- 初始密码路径:/opt/jenkins_home/secrets/initialAdminPassword
- 启动示例:
- 安装常用插件
- Git、Maven Integration、NodeJS、Generic Webhook Trigger、Publish Over SSH、Docker Pipeline、Blue Ocean。
三 触发器与权限配置
- 代码托管 Webhook
- 在 GitLab/GitHub 项目设置 Webhook,指向 http://< JENKINS_URL> /generic-webhook-trigger/invoke(或项目专用端点),触发 push/merge 事件自动构建。
- Jenkins 任务中安装并启用 Generic Webhook Trigger,按需配置 Token 与请求参数映射。
- SSH 免密与远程部署
- 在 Jenkins 凭据中新增 SSH 私钥(目标服务器为 root 或具备 sudo 权限的部署用户),用于拉取私有仓库与远程执行脚本。
- 系统管理 → 系统配置 → Publish over SSH 中添加目标服务器信息(Host、Port、Credentials、Remote Directory)。
四 自动化部署方案与示例
- 方案 A 远程发布脚本 + Publish Over SSH(通用、简单)
- 思路:Jenkins 构建后将产物(如 target/app.jar 或前端 dist/)通过 SSH 传到目标机,执行远程脚本完成停旧、启新、健康检查。
- 远程示例脚本 deploy.sh(Java)
- 作用:停止旧进程、拷贝新包、启动并防止被 Jenkins 杀掉子进程。
- 关键点:设置环境变量 JENKINS_NODE_COOKIE=dontKillMe 或使用 BUILD_ID=dontKillMe,避免 Jenkins 在构建结束后终止后台进程。
- 示例:
#!/bin/bashJENKINS_NODE_COOKIE=dontKillMeJAR_NAME_NEW="app.jar"; APP_DIR="/opt/myapp"; PID=$(ps -ef | grep $JAR_NAME_NEW | grep -v grep | awk '{ print $2} ')[ -n "$PID" ] & & kill -9 $PID || echo "No old process."mkdir -p $APP_DIRcp $WORKSPACE/target/$JAR_NAME_NEW $APP_DIR/cd $APP_DIR & & nohup java -jar $JAR_NAME_NEW > app.log 2> & 1 &sleep 10 & & tail -n 200 app.log
- Jenkins 任务配置
- 构建后操作选择 Send build artifacts over SSH:
- Source files:
target/*.jar,deploy.sh - Remove prefix:
target - Remote directory:
/opt/myapp - Exec command:
sh /opt/myapp/deploy.sh
- Source files:
- 构建后操作选择 Send build artifacts over SSH:
- 方案 B Docker 化部署(一致性与回滚友好)
- 思路:在代码仓库提供 Dockerfile 与可选 docker-compose.yml,Jenkins 构建镜像并推送到仓库(如 Harbor 或 Docker Hub),在目标机拉取并启动。
- 示例 Dockerfile(Java)
FROM eclipse-temurin:11-jreWORKDIR /appCOPY target/app.jar /app/app.jarEXPOSE 8080CMD ["java","-jar","/app/app.jar"]
- Jenkins Pipeline 片段(声明式)
pipeline { agent any stages { stage('Build') { steps { sh 'mvn clean package' } } stage('Build & Push Image') { steps { sh 'docker build -t $REGISTRY/namespace/app:$BUILD_NUMBER .' sh 'docker push $REGISTRY/namespace/app:$BUILD_NUMBER' } } stage('Deploy') { steps { sh 'ssh deploy@prod "docker pull $REGISTRY/namespace/app:$BUILD_NUMBER & & docker stop app || true & & docker rm app || true & & docker run -d --name app -p 8080:8080 $REGISTRY/namespace/app:$BUILD_NUMBER"' } } }
- 如需回滚,可在目标机执行
docker run ... $REGISTRY/namespace/app:< 上一个版本>。
五 前端与 Java 的落地要点
- 前端(Vue/Nuxt 等)
- 安装 NodeJS 插件并配置版本;在构建步骤执行:
node -v & & npm -vnpm install -g yarn --registry=https://registry.npmmirror.comyarn install & & yarn lint & & yarn build
- 将 dist/ 目录通过 SSH 发布到 Nginx 静态目录,或构建 Nginx 镜像进行容器化发布。
- 安装 NodeJS 插件并配置版本;在构建步骤执行:
- Java(Maven)
- 安装 Maven Integration 插件;在构建步骤执行:
mvn clean package -DskipTests
- 产物 target/*.jar 通过 SSH 或 Docker 发布到目标环境。
- 安装 Maven Integration 插件;在构建步骤执行:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何自动化centos上的jenkins部署
本文地址: https://pptw.com/jishu/779091.html
