在 CentOS 上实现 Jenkins 自动化部署
一 架构与准备
二 安装与初始化
sudo yum install -y java-11-openjdk-develsudo 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 jenkinssudo systemctl start jenkinssudo systemctl enable jenkinssudo cat /var/lib/jenkins/secrets/initialAdminPassworddocker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v /opt/jenkins_home:/var/jenkins_home --restart unless-stopped jenkins/jenkins:lts三 触发器与权限配置
四 自动化部署方案与示例
#!/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.logtarget/*.jar,deploy.shtarget/opt/myappsh /opt/myapp/deploy.shFROM eclipse-temurin:11-jreWORKDIR /appCOPY target/app.jar /app/app.jarEXPOSE 8080CMD ["java","-jar","/app/app.jar"]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 的落地要点
node -v && npm -vnpm install -g yarn --registry=https://registry.npmmirror.comyarn install && yarn lint && yarn buildmvn clean package -DskipTests