1. 首页 > Linux教程 > 正文

Linux教程FG492-Linux自动化部署实战

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

风哥提示:

本文档介绍Linux自动化部署实战案例。

Part01-Jenkins CI/CD配置

1.1 Jenkins安装配置

# 安装Jenkins
[root@fgedu-jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@fgedu-jenkins ~]# rpm –import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
[root@fgedu-jenkins ~]# yum install -y jenkins java-17-openjdk
[root@fgedu-jenkins ~]# systemctl enable jenkins –now

# 查看初始密码
[root@fgedu-jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
abc123def456ghi789jkl012mno345pqr

# 配置Jenkins
[root@fgedu-jenkins ~]# cat > /etc/sysconfig/jenkins << 'EOF' JENKINS_HOME="/var/lib/jenkins" JENKINS_USER="jenkins" JENKINS_PORT="8080" JENKINS_ARGS="--webroot=/var/cache/jenkins/war --httpPort=$JENKINS_PORT" EOF # 安装必要插件 # 在Jenkins Web界面安装: Git, Pipeline, Docker, Kubernetes # 创建Pipeline项目 [root@fgedu-jenkins ~]# cat > /var/lib/jenkins/jobs/fgedu-app/config.xml << 'EOF'

FGEDU应用CI/CD流水线




http://git.fgedu.net.cn/fgedu/app.git




*/main



Jenkinsfile


EOF

Part02-Pipeline流水线

2.1 编写Jenkinsfile

# 创建Jenkinsfile
[root@fgedu-jenkins ~]# cat > /var/lib/jenkins/Jenkinsfile << 'EOF' pipeline { agent any environment { DOCKER_REGISTRY = '192.168.1.100:30002' IMAGE_NAME = 'fgedu/app' KUBE_NAMESPACE = 'fgedu-prod' } stages { stage('Checkout') { steps { checkout scm echo "代码检出完成" } } stage('Build') { steps { sh ''' echo "构建应用..." mvn clean package -DskipTests ''' } } stage('Test') { steps { sh ''' echo "运行测试..." mvn test ''' } post { always { junit '**/target/surefire-reports/*.xml' } } } stage('Docker Build') { steps { sh ''' echo "构建Docker镜像..." docker build -t ${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER} . docker tag ${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER} ${DOCKER_REGISTRY}/${IMAGE_NAME}:latest ''' } } stage('Docker Push') { steps { withCredentials([usernamePassword(credentialsId: 'harbor-credentials', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]) { sh ''' docker login -u ${DOCKER_USER} -p ${DOCKER_PASS} ${DOCKER_REGISTRY} docker push ${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER} docker push ${DOCKER_REGISTRY}/${IMAGE_NAME}:latest ''' } } } stage('Deploy to K8s') { steps { sh ''' echo "部署到Kubernetes..." kubectl set image deployment/fgedu-app fgedu-app=${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER} -n ${KUBE_NAMESPACE} kubectl rollout status deployment/fgedu-app -n ${KUBE_NAMESPACE} ''' } } } post { success { echo "部署成功!" mail to: 'devops@fgedu.net.cn', subject: "部署成功: ${env.JOB_NAME} #${env.BUILD_NUMBER}", body: "部署成功,请查看: ${env.BUILD_URL}" } failure { echo "部署失败!" mail to: 'devops@fgedu.net.cn', subject: "部署失败: ${env.JOB_NAME} #${env.BUILD_NUMBER}", body: "部署失败,请检查: ${env.BUILD_URL}" } } } EOF

Part03-自动化测试

3.1 集成测试配置

# 创建测试脚本
[root@fgedu-jenkins ~]# cat > /var/lib/jenkins/scripts/integration-test.sh << 'EOF' #!/bin/bash # integration-test.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn APP_URL="http://fgedu-app.fgedu-prod.svc.cluster.local:8080" TIMEOUT=60 echo "=== 集成测试开始 ===" # 等待服务就绪 echo "等待服务启动..." for i in $(seq 1 $TIMEOUT); do if curl -s -o /dev/null -w "%{http_code}" $APP_URL/health | grep -q "200"; then echo "服务已就绪" break fi sleep 1 done # 执行API测试 echo "执行API测试..." # 测试用户API response=$(curl -s -o /dev/null -w "%{http_code}" $APP_URL/api/users) if [ "$response" == "200" ]; then echo "用户API测试通过" else echo "用户API测试失败: HTTP $response" exit 1 fi # 测试健康检查 response=$(curl -s $APP_URL/health) if echo "$response" | grep -q "OK"; then echo "健康检查测试通过" else echo "健康检查测试失败" exit 1 fi echo "=== 集成测试完成 ===" EOF [root@fgedu-jenkins ~]# chmod +x /var/lib/jenkins/scripts/integration-test.sh

Part04-部署回滚

4.更多视频教程www.fgedu.net.cn1 回滚机制配置

# 创建回滚脚本
[root@fgedu-jenkins ~]# cat > /var/lib/jenkins/scripts/rollback.sh << 'EOF' #!/bin/bash # rollback.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn NAMESPACE="fgedu-prod" DEPLOYMENT="fgedu-app" echo "=== 部署回滚 ===" # 查看历史版本 echo "可用的历史版本:" kubectl rollout history deployment/$DEPLOYMENT -n $NAMESPACE # 获取上一个版本 PREVIOUS_REVISION=$(kubectl rollout history deployment/$DEPLOYMENT -n $NAMESPACE | tail -2 | head -1 | awk '{print $1}') echo "" echo "即将回滚到版本: $PREVIOUS_REVISION" read -p "确认回滚? (y/n): " confirm if [ "$confirm" == "y" ]; then echo "执行回滚..." kubectl rollout undo deployment/$DEPLOYMENT -n $NAMESPACE echo "等待回滚完成..." kubectl rollout status deployment/$DEPLOYMENT -n $NAMESPAC学习交流加群风哥微信: itpux-comE echo "回滚完成!" else echo "取消回滚" fi EOF [root@fgedu-jenkins ~]# chmod +x /var/lib/jenkins/scripts/rollback.sh # 查看部署历史 [root@fgedu-jenkins ~]# kubectl rollout history deployment/fgedu-app -n fgedu-prod deployment.apps/fgedu-app REVISION CHANGE-CAUSE 1
2 kubectl set image deployment/fgedu-app fgedu-app=192.168.1.100:30002/fgedu/app:10
3 kubectl set image deployment/fgedu-app fgedu-app=192.168.1.100:30002/fgedu/app:11

# 执行回滚
[root@fgedu-jenkins ~]# kubectl rollout undo deployment/fgedu-app -n fgedu-prod
deployment.apps/fgedu-app rolled back

风哥针对自动化部署建议:

  • 建立完整的CI/CD流水线
  • 实施自动化测试
  • 配置回滚机制
  • 集成代码质量检查
  • 配置部署通知

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息