CI/CD 实战:Git + Jenkins 自动化部署

分类:CI/CD
标签: Git、Jenkins、CI/CD、流水线、Pipeline、持续集成、持续部署
摘要: 手动部署又慢又容易出错,CI/CD 就是”代码提交 → 自动构建 → 自动部署”的流水线。本文从版本管理 Git 讲起,到用 Jenkins 拉开”拉代码→构建→部署”三段流水线,并实测”改一行代码自动上新版本”的闭环。


一、Git 版本管理(先管住代码)

git init                 # 初始化仓库
git clone 仓库地址         # 克隆远程仓库
git status               # 看改了哪些文件
git add .                # 暂存所有改动
git commit -m "说明"      # 提交
git push                 # 推到远程
git pull                 # 拉最新
git log --oneline        # 看提交历史
git branch               # 看分支
git checkout 分支名        # 切分支
git remote -v            # 看远程地址

必踩的坑:dubious ownership
报错 fatal: detected dubious ownership in repository:仓库是别的用户建的(如 root),Git 安全机制拒绝访问。
解决:

git config --global --add safe.directory 仓库路径

二、安装 Jenkins

# 装 Java 依赖
sudo apt update && sudo apt install -y openjdk-11-jdk git
# 装 Jenkins(走官方源,会下载一会)
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt update && sudo apt install -y jenkins
# 启动
sudo systemctl start jenkins && sudo systemctl enable jenkins && sudo systemctl status jenkins

初始化 4 步:
1. 拿初始管理员密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
2. 浏览器访问 http://<IP>:8080,粘贴密码
3. 选 Install suggested plugins 装插件
4. 创建管理员账号


三、最简流水线(Point 2 段式)

在 Jenkins 新建 Pipeline 任务,Script 输入框粘贴:

pipeline {
    agent any
    stages {
        stage('构建') {
            steps { echo '开始构建...' }
        }
        stage('部署') {
            steps { sh 'echo deployed | sudo tee /var/www/html/index.html' }
        }
    }
}

点 立即构建,看蓝色方块 = 成功。访问后端 http://<IP>:8080 看到 deployed = 链路打通。

四、经典三段式流水线(拉代码→构建→部署)

pipeline {
    agent any
    stages {
        stage('拉取代码') {
            steps {
                sh 'rm -rf $WORKSPACE/cidep && git clone /var/jenkins_home/cidep $WORKSPACE/cidep && cd $WORKSPACE/cidep && git log --oneline'
            }
        }
        stage('构建') {
            steps {
                sh 'cd $WORKSPACE/cidep && tar czf app.tar.gz index.html && ls -l app.tar.gz'
            }
        }
        stage('部署') {
            steps {
                sh 'mkdir -p /tmp/deployed && cp $WORKSPACE/cidep/index.html /tmp/deployed/ && ls -l /tmp/deployed/index.html && cat /tmp/deployed/index.html'
            }
        }
    }
}

闭环实测: 改代码提交新版本 → 点”立即构建” → 日志里能看到拉到新 commit、部署输出新版本号。

五、踩坑速记

坑现象解决
Jenkins 页面一直转圈初始化慢正常,等日志出 Jenkins is fully up and running
Git 拒绝访问dubious ownershipgit config --global --add safe.directory 路径
插件装失败Git 插件超时不影响主流程,核心 Pipeline 优先
部署没更新还是旧版本确认 git clone 是否拿到新代码、部署路径对不对
分类: CI/CD