Jenkins - 自动化部署
Jenkins - 自动化部署策略
Section titled “Jenkins - 自动化部署策略”自动化部署是持续交付和持续部署的核心组成部分。Jenkins 提供了多种方法和插件来将应用程序部署到不同的环境。
虽然存在像 ‘Deploy to container’ 这样的旧插件,用于将 WAR/EAR 文件直接部署到传统的应用服务器(Tomcat、JBoss/WildFly),但现代部署通常涉及容器、云平台或制品仓库。
Jenkins Pipeline 中的常见部署方法
Section titled “Jenkins Pipeline 中的常见部署方法”1. 通过 SSH 部署
Section titled “1. 通过 SSH 部署”这是一种将应用程序部署到传统服务器(虚拟机或物理机)的常见方法。它通常包括:
- 前置条件: 安装 ‘SSH Agent’ 插件。
- 凭据: 将 SSH 私钥安全地存储在 Jenkins Credentials 中。
- Pipeline 步骤: 使用
sshagent步骤来包装需要 SSH 访问的命令。在包装器内部,使用sh步骤配合scp(复制文件)和ssh(执行远程命令,如重启服务、运行部署脚本)等命令。
示例代码片段(Declarative Pipeline):
stage('Deploy to Staging') { steps { sshagent(credentials: ['your-ssh-key-credential-id']) { sh 'scp target/myapp.war user@staging.example.com:/opt/tomcat/webapps/' sh 'ssh user@staging.example.com systemctl restart tomcat' } }}2. 部署 Docker 容器
Section titled “2. 部署 Docker 容器”容器化技术非常流行。Jenkins 与 Docker 集成良好:
- 前置条件: 在 Jenkins Agent 上安装 Docker(或使用 Docker Agent)。安装 ‘Docker Pipeline’ 和 ‘Docker Commons’ 插件。
- 凭据: 将 Docker 注册表凭据(例如 Docker Hub、AWS ECR、Google GCR)存储在 Jenkins Credentials 中。
- Pipeline 步骤: 使用 Docker Pipeline 步骤,例如
docker.build('myimage:latest')来构建镜像,docker.withRegistry('https://registry.example.com', 'docker-registry-credential-id') { ... }来推拉镜像,并可能使用sh 'docker run ...'或编排工具命令(见下文)。
示例代码片段(Declarative Pipeline):
stage('Build and Push Docker Image') { steps { script { def customImage = docker.build('my-org/myapp:${env.BUILD_NUMBER}') docker.withRegistry('https://docker.io', 'dockerhub-credentials') { customImage.push() customImage.push('latest') } } }}stage('Deploy to Kubernetes') { // Requires Kubernetes CLI (kubectl) configured on agent and appropriate plugins steps { echo 'Deploying using kubectl...' // Example: sh 'kubectl apply -f deployment.yaml' // Or use Kubernetes pipeline steps: https://plugins.jenkins.io/kubernetes-cli/ }}3. 部署到云平台
Section titled “3. 部署到云平台”主流云提供商都有专用的 Jenkins 插件,可实现无缝部署:
- AWS: CodeDeploy、Elastic Beanstalk、S3、ECS、EKS、Lambda 的插件。使用这些插件提供的相应 Pipeline 步骤(例如
s3Upload、ecsDeploy)。 - Azure: App Service、AKS、Azure Functions、Container Instances 的插件。使用相关步骤(例如
azureWebAppPublish)。 - Google Cloud: GKE、App Engine、Cloud Functions、Cloud Run 的插件。使用 ‘Google Cloud SDK’ 或特定插件提供的步骤。
云平台的凭据应安全地存储在 Jenkins Credentials 中。
4. 发布到制品仓库
Section titled “4. 发布到制品仓库”流水线通常不直接部署,而是将构建好的制品(JAR、WAR、NPM 包、Docker 镜像)发布到诸如 Nexus Repository Manager 或 JFrog Artifactory 的仓库中。下游流程或部署工具随后会拉取这些制品。
- 前置条件: Nexus Platform 或 Artifactory 的插件。
- 构建工具集成: 配置 Maven/Gradle/NPM 以发布到仓库。
- Pipeline 步骤: 使用构建工具命令(
mvn deploy、gradle publish)或专用插件步骤(nexusPublisher、rtUpload)。
选择正确的策略
Section titled “选择正确的策略”最佳部署策略取决于您的应用程序架构、基础设施和团队实践。Jenkins 提供了实现各种方法的灵活性,通常可以在单个流水线中结合多种方法(例如,构建 Docker 镜像,推送到注册表,通过 SSH 或 Kubernetes 命令触发部署)。