Linux Jenkins怎样实现持续集成
导读:Linux 上用 Jenkins 实现持续集成的落地步骤 一 环境准备与安装 安装 Java:建议 Java 11 或 17(LTS)。例如在 Ubuntu/Debian 执行:sudo apt update && sud...
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
- Ubuntu/Debian(使用签名密钥与 APT 源):
- 启动与开机自启: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 模板
- Java + Maven
pipeline {
agent any
tools {
maven 'Maven-3' // 需在 Global Tool Configuration 中定义
jdk 'JDK-11' // 需在 Global Tool Configuration 中定义
}
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' // 结合 settings.xml 与仓库凭证
// 或使用 sshPublisher 将产物发布到目标主机
}
}
}
post {
always {
cleanWs() }
success {
echo 'Build &
Test SUCCESS' }
failure {
echo 'Build FAILED' }
}
}
- Node.js(前端)
pipeline {
agent any
tools {
nodejs 'Node-16' }
// 需在 Global Tool Configuration 中定义
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 发布到 Nginx 目录
sshPublisher(publishers: [sshPublisherDesc(
configName: 'prod-ssh',
transfers: [sshTransfer(execCommand: 'cd /var/www &
&
git pull', remoteDirectory: '/var/www')]
)])
}
}
}
}
- C/C++
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。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Jenkins怎样实现持续集成
本文地址: https://pptw.com/jishu/750622.html
