在 Ubuntu 上落地 Jenkins 自动化的关键步骤
一 环境准备与安装
- 安装 Java 11/17(Jenkins 2.361+ 建议使用 JDK 17):
- sudo apt update && sudo apt install -y openjdk-17-jdk
- java -version
- 安装 Jenkins(APT 方式):
- curl -fsSL https://pkg.jenkins.io/debian/jenkins.io.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 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
- 访问 http://<服务器IP>:8080,完成解锁(查看初始密码)与插件安装。
- 可选:安装 Docker(用于镜像构建与部署)
- sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
- sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io
- sudo systemctl start docker && sudo systemctl enable docker
- sudo docker run --rm hello-world
二 创建自动化流水线
- 在 Jenkins 中新建任务,选择 Pipeline,在 “Pipeline” 配置里选择 Pipeline script from SCM,指定 Git 仓库与分支,脚本路径为 Jenkinsfile(置于项目根目录)。
- 示例 Jenkinsfile(声明式,Maven + Docker 场景):
pipeline {
agent any
environment {
IMAGE = “your-registry/your-app:${env.BUILD_NUMBER}”
REGISTRY = “https://index.docker.io/v1/”
}
stages {
stage(‘Checkout’) {
steps { git branch: ‘main’, url: ‘git@github.com:your-org/your-app.git’ }
}
stage(‘Build’) {
steps { sh ‘mvn -B -DskipTests clean package’ }
}
stage(‘Docker Build’) {
steps {
script {
docker.build(IMAGE, “-f Dockerfile .”)
}
}
}
stage(‘Docker Push’) {
steps {
withCredentials([usernamePassword(credentialsId: ‘docker-hub-creds’, usernameVariable: ‘DOCKER_USER’, passwordVariable: ‘DOCKER_PASS’)]) {
sh “echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin $REGISTRY”
sh “docker push $IMAGE”
}
}
}
stage(‘Deploy’) {
steps {
sh ‘’’
docker rm -f app || true
docker run -d --name app -p 8080:8080 $IMAGE
‘’’
}
}
}
}
- 说明:
- 将 docker-hub-creds 替换为你的 Docker Hub/私有仓库凭证 ID。
- 生产环境建议使用 Kubernetes 或 docker-compose 替代裸 run,并加入健康检查与回滚策略。
三 触发与集成
- 代码变更自动触发:在 GitHub/GitLab 创建 Webhook,Payload URL 为 http://<JENKINS_URL>/github-webhook/(或 GitLab 等效路径),选择 Push events / Merge requests 等事件;Jenkins 任务需勾选 “GitHub hook trigger for GITScm polling”。
- 定时触发(夜间构建示例):在 “Build Triggers” 勾选 “Build periodically”,日程表达式填写 H 2 * * 1-5(工作日 02:00 左右执行)。
- 代码质量与安全:
- 集成 SonarQube(SonarScanner 步骤)、单元测试报告(JUnit XML)、代码覆盖率(Jacoco)。
- 关键阶段失败即阻断(如测试、镜像扫描),保障质量门禁。
四 安全与运维要点
- 访问与端口:
- 开放 8080(Web)与 50000(Agent 通信);如经 Apache/Nginx 反向代理,可对外仅暴露 80/443,并在代理层配置 HTTPS 与必要的头部转发。
- 凭据管理:
- 使用 Jenkins Credentials 存储 SSH 私钥、Docker 仓库账号、服务器 SSH Key 等,避免在脚本中明文存放。
- 权限与审计:
- 禁用匿名访问,按团队划分 Item 权限,启用 Audit Log 与必要的 CSRF 防护。
- 代理与镜像加速:
- 插件更新或下载依赖慢时,可在 “Manage Jenkins → Manage Plugins → Advanced” 配置 Update Site 为国内镜像(如清华源)以加速。
五 Docker 方式运行 Jenkins(可选)
- 适用于希望快速起步或做环境隔离的场景。
- 启动示例(挂载 Docker 套接字,容器可直接使用宿主机 Docker):
- mkdir -p /opt/jenkins_home && chown -R 1000:1000 /opt/jenkins_home
- 使用 docker-compose.yml:
version: ‘3.8’
services:
jenkins:
image: jenkins/jenkins:lts-jdk17
container_name: jenkins
restart: always
ports:
- “8080:8080”
- “50000:50000”
volumes:
- /opt/jenkins_home:/var/jenkins_home
- /usr/bin/docker:/usr/bin/docker
- /var/run/docker.sock:/var/run/docker.sock
environment:
- JAVA_OPTS=-Djenkins.install.runSetupWizard=false
- 首次登录密码:docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 注意:挂载 /var/run/docker.sock 带来高权限,务必配合严格的访问控制与最小权限原则。