Linux 上用 Jenkins 实现持续集成的落地步骤
一 环境准备与安装
- 安装 Java:建议 Java 11 或 17(LTS)。例如在 Ubuntu/Debian 执行:sudo apt update && sudo apt install openjdk-11-jdk;在 CentOS/RHEL 执行:sudo yum install java-11-openjdk-devel。完成后用 java -version 验证。
- 安装 Jenkins:
- Ubuntu/Debian(使用签名密钥与 APT 源):
curl -fsSL 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 jenkins
- CentOS/RHEL(YUM 源):
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo yum install jenkins
- 启动与开机自启:sudo systemctl start jenkins && sudo systemctl enable jenkins;查看状态:sudo systemctl status jenkins。
- 防火墙放行:
- Ubuntu/Debian(ufw):sudo ufw allow 8080
- CentOS/RHEL(firewalld):sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload
- 首次访问与解锁:浏览器打开 http://<服务器IP>:8080,初始管理员密码在 /var/lib/jenkins/secrets/initialAdminPassword。
- 可选 Docker 方式:docker pull jenkins/jenkins:lts;数据持久化建议挂载 /var/jenkins_home。
二 初始化与安全配置
- 安装插件:首次进入选择 Install suggested plugins;后续可在 Manage Jenkins > Manage Plugins 安装所需插件,如 Git、Maven Integration、Pipeline、SSH Pipeline Steps 等。
- 更换插件镜像源(国内加速):进入 Manage Jenkins > Manage Plugins > Advanced,将 Update Site URL 改为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json。
- 系统配置:在 Global Tool Configuration 配置 JDK、Git、Maven 路径;在 Configure System 配置 SSH 服务器(用于发布与远程执行)。
- 安全与权限:启用 CSRF 保护,使用 Role-Based Authorization Strategy 进行细粒度授权;建议配置 Nginx 反向代理 + HTTPS(证书可用 Let’s Encrypt)。
三 创建任务与触发器
- Freestyle 任务(通用):
- 源码管理:选择 Git,填写仓库 URL 与分支(如 main),配置凭证(SSH 或 HTTPS)。
- 构建触发器:
- 轮询 SCM:如 **H/5 * * * ***(每 5 分钟检查一次变更)
- Webhook:在代码托管平台(如 GitLab/GitHub)配置 Webhook URL:http:///git/notifyCommit?url=<REPO_URL>,Jenkins 安装 Git plugin 后可用;需要 CSRF 保护时配合 Crumb Issuer。
- 构建步骤:
- Java/Maven:执行 mvn clean package 或 mvn clean install
- Node.js:执行 npm install && npm run build
- C/C++:执行 make && make test
- Pipeline 任务(推荐,代码即流程):在项目根目录创建 Jenkinsfile,将构建、测试、部署流程纳入版本控制,便于复用与审计。
四 示例 Jenkinsfile 模板
pipeline {
agent any
tools {
maven 'Maven-3'
jdk 'JDK-11'
}
stages {
stage('Checkout') {
steps { git url: 'https://github.com/your-org/your-app.git', branch: 'main' }
}
stage('Build') {
steps { sh 'mvn clean package -DskipTests' }
}
stage('Test') {
steps { sh 'mvn test' }
}
stage('Deploy') {
when { branch 'main' }
steps {
sh 'mvn deploy'
}
}
}
post {
always { cleanWs() }
success { echo 'Build & Test SUCCESS' }
failure { echo 'Build FAILED' }
}
}
pipeline {
agent any
tools { nodejs 'Node-16' }
stages {
stage('Checkout') { steps { git url: 'https://github.com/your-org/your-web.git', branch: 'main' } }
stage('Install') { steps { sh 'npm ci' } }
stage('Build') { steps { sh 'npm run build' } }
stage('Deploy') {
when { branch 'main' }
steps {
sshPublisher(publishers: [sshPublisherDesc(
configName: 'prod-ssh',
transfers: [sshTransfer(execCommand: 'cd /var/www && git pull', remoteDirectory: '/var/www')]
)])
}
}
}
}
pipeline {
agent any
stages {
stage('Checkout') { steps { git url: 'https://github.com/your-org/your-cpp.git', branch: 'main' } }
stage('Build') { steps { sh 'make -j$(nproc)' } }
stage('Test') { steps { sh 'make test || true' } }
stage('Archive') { steps { archiveArtifacts artifacts: '**/target/*.zip,**/build/*.tar.gz', fingerprint: true } }
}
}
说明:上述示例使用 Jenkins Pipeline 将 拉取代码、构建、测试、部署 串联为可重复执行的流水线;SSH 发布可借助 sshPublisher 插件完成远程部署。
五 运维与优化要点
- 日志与排错:查看服务日志 sudo journalctl -u jenkins.service -f;构建日志在 Jenkins 控制台与 /var/log/jenkins/jenkins.log。
- 端口与路径:默认 8080;修改 /etc/default/jenkins(Debian/Ubuntu)或 /etc/sysconfig/jenkins(CentOS/RHEL)中的 JENKINS_PORT;Jenkins 主目录 /var/lib/jenkins(备份与迁移重点)。
- 性能与扩展:使用 Jenkins Agent 做分布式构建;构建环境使用 Docker 镜像 固化依赖;按项目拆分 Job/Pipeline 与 视图,减少资源争用。
- 安全加固:限制 代理到目标主机的 SSH 密钥 权限(仅部署所需目录与命令);开启 审计日志;定期升级 Jenkins 与插件;为外网访问启用 反向代理 + HTTPS。