安装Jenkins
更新系统并安装Java(Jenkins依赖Java环境),添加Jenkins官方APT仓库,安装Jenkins并启动服务:
sudo apt update
sudo apt install openjdk-11-jdk -y # 推荐OpenJDK 11
wget -q -O - https://pkg.jenkins.io/debian-stable/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-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt update
sudo apt install jenkins -y
sudo systemctl start jenkins
sudo systemctl enable jenkins # 设置开机自启
访问http://<服务器IP>:8080,输入初始密码(位于/var/lib/jenkins/secrets/initialAdminPassword)完成初始化。
安装Docker(可选,用于容器化部署)
若需用Docker容器部署,需安装Docker并授权Jenkins用户操作:
sudo apt install docker.io -y
sudo systemctl enable docker
sudo usermod -aG docker jenkins # 将jenkins用户加入docker组
sudo systemctl restart jenkins
安装必要工具
根据项目需求安装Git、Maven/Gradle、Node.js等工具(如Java项目需Maven,前端项目需Node.js):
sudo apt install git -y
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - # Node.js示例
sudo apt install -y nodejs
安装核心插件
登录Jenkins → Manage Jenkins → Manage Plugins,安装以下插件:
配置全局工具
进入Manage Jenkins → Global Tool Configuration,设置工具路径(Jenkins需知道工具的安装位置):
/usr/lib/jvm/java-11-openjdk-amd64)/usr/bin/git)/opt/maven/apache-maven-3.8.6)。添加凭证
进入Manage Jenkins → Manage Credentials,添加以下凭证:
新建Pipeline任务
进入Jenkins主页 → New Item → 输入任务名称(如ubuntu-app-deploy)→ 选择Pipeline → 点击OK。
配置Pipeline脚本
有两种方式定义流水线:
https://github.com/your-repo/ubuntu-app.git),指定分支(如main),并在“Script Path”中填写Jenkinsfile(Jenkins会自动从仓库拉取该文件)。示例Jenkinsfile(Docker+SSH部署)
以下是一个完整的Jenkinsfile示例,包含代码拉取、Docker构建/推送、远程部署步骤:
pipeline {
agent any
environment {
DOCKER_IMAGE = "your-dockerhub-username/ubuntu-app:${BUILD_NUMBER}" // 镜像名称(含构建编号)
REMOTE_SERVER = "ubuntu@your-server-ip" // 远程服务器SSH地址
REMOTE_DIR = "/home/ubuntu/app" // 远程服务器部署目录
DOCKER_HUB_CREDENTIAL = credentials('dockerhub-credential-id') // Jenkins中配置的Docker Hub凭证ID
SSH_CREDENTIAL = credentials('ssh-credential-id') // Jenkins中配置的SSH凭证ID
}
stages {
// 1. 拉取代码
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/your-repo/ubuntu-app.git'
}
}
// 2. 构建Docker镜像
stage('Build Image') {
steps {
script {
docker.build(DOCKER_IMAGE)
}
}
}
// 3. 推送镜像到Docker Hub(可选,若需远程部署)
stage('Push Image') {
steps {
script {
docker.withRegistry('https://registry.hub.docker.com', DOCKER_HUB_CREDENTIAL) {
docker.image(DOCKER_IMAGE).push()
}
}
}
}
// 4. 远程部署到Ubuntu服务器
stage('Deploy to Ubuntu') {
steps {
script {
// 停止旧容器(若存在)
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'deploy', // Jenkins中配置的SSH服务器名称
transfers: [
sshTransfer(
execCommand: """
cd ${REMOTE_DIR} &&
docker stop ubuntu-app || true &&
docker rm ubuntu-app || true &&
docker pull ${DOCKER_IMAGE} &&
docker run -d -p 8080:8080 --name ubuntu-app ${DOCKER_IMAGE}
"""
)
]
)
]
)
}
}
}
// 5. 健康检查(可选,确保部署成功)
stage('Health Check') {
steps {
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'deploy',
transfers: [
sshTransfer(
execCommand: """
max_attempts=5
attempt=1
while [ $attempt -le $max_attempts ]; do
response=\$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/health)
if [ "$response" = "200" ]; then
echo "Health check succeeded"
exit 0
fi
echo "Attempt $attempt failed, waiting... (Status code: $response)"
sleep 10
attempt=$((attempt + 1))
done
echo "Health check failed after $max_attempts attempts"
exit 1
"""
)
]
)
]
)
}
}
}
}
}
配置SSH服务器(Pipeline中用到)
进入Manage Jenkins → Manage Credentials,添加SSH凭证(私钥),然后在Jenkins中配置SSH服务器:
ubuntu-server),选择“Permanent Agent”,填写远程工作目录(如/home/ubuntu/jenkins),选择凭证(SSH私钥),点击Save。代码提交触发
在Jenkins任务的Configure页面,勾选Poll SCM,设置触发频率(如H/5 * * * *表示每5分钟检查一次代码变更);或在Git仓库(如GitHub)配置Webhook,指向Jenkins的http://<服务器IP>:8080/github-webhook/(需安装GitHub Integration插件)。
手动触发
在Jenkins任务页面点击Build Now,手动触发构建(适合测试或调试)。
sudo usermod -aG docker jenkins # 允许jenkins用户使用Docker
sudo systemctl restart jenkins
-U参数,强制更新依赖:sh 'mvn clean package -DskipTests -U'