You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询Jenkins部署PL/SQL至Oracle生产库的无密码认证方案

当然可以实现无密码部署!针对生产Oracle数据库的PL/SQL代码交付,Jenkins流水线完全支持你提到的几种无密码认证方案,我结合实际生产经验给你拆解每个方案的实操步骤:

方案1:Oracle Wallet(Oracle官方推荐,最稳定)

这是Oracle官方专为数据库无密码访问设计的方案,本质是把数据库连接凭据加密存储在Wallet文件里,仅需在初始化时输入一次密码,后续无需明文密码就能建立连接,我在多个生产环境里用过这个方案,稳定性拉满。

  • 步骤1:创建并配置Oracle Wallet
    在Jenkins代理节点(需能访问生产库)上,用Oracle自带的mkstore工具创建Wallet:
    # 创建Wallet,可设置Wallet自身的保护密码(可选)
    mkstore -wrl /opt/oracle/wallet/prod -create
    # 向Wallet中添加生产库的连接凭据(仅需输入一次数据库密码)
    mkstore -wrl /opt/oracle/wallet/prod -createCredential prod-db:1521/prod_pdb deploy_user
    
    接着修改Oracle客户端的配置文件:
    • 在sqlnet.ora中指定Wallet路径:
      WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /opt/oracle/wallet/prod)))
      SQLNET.WALLET_OVERRIDE = TRUE
      
    • tnsnames.ora保持生产库的常规配置即可。
  • 步骤2:Jenkins流水线配置
    将Wallet目录以加密文件凭据的方式存入Jenkins凭据库,流水线中指定Oracle客户端配置路径后,就能无密码连接数据库:
    pipeline {
        agent { label 'oracle-prod-agent' }
        environment {
            ORACLE_HOME = '/opt/oracle/client'
            TNS_ADMIN = '/opt/oracle/config/prod' // 包含sqlnet.ora和tnsnames.ora的目录
        }
        stages {
            stage('Deploy PL/SQL') {
                steps {
                    // 从Jenkins凭据中取出Wallet文件并解压到指定目录
                    credentials('prod-oracle-wallet').with {
                        sh "unzip ${file} -d /opt/oracle/wallet/prod"
                    }
                    sh '''
                        # 直接通过Wallet连接,无需输入密码
                        sqlplus /@prod-db << EOF
                        @./scripts/deploy_package.sql
                        exit;
                        EOF
                    '''
                }
            }
        }
    }
    
方案2:SSH密钥对(适用于SSH跳板机访问场景)

如果生产数据库只能通过SSH跳板机访问,或者需要在数据库服务器上直接执行SQL脚本,SSH密钥对是个灵活的选择:

  • 步骤1:配置SSH密钥授权
    在Jenkins代理节点生成无密码RSA密钥对(或把带密码的私钥存入Jenkins凭据):
    ssh-keygen -t rsa -b 4096 -f ~/.ssh/jenkins-prod-db -N ""
    
    将公钥添加到跳板机/数据库服务器的~/.ssh/authorized_keys文件中,确保Jenkins用户能无密码登录目标机器。
  • 步骤2:Jenkins流水线配置
    用Jenkins的sshagent插件加载私钥凭据,直接远程执行PL/SQL部署命令:
    pipeline {
        agent any
        stages {
            stage('Remote Deploy') {
                steps {
                    sshagent(['prod-db-ssh-key']) { // 对应Jenkins中存储的私钥凭据ID
                        sh '''
                            # 直接SSH到数据库服务器执行SQL脚本
                            ssh deploy-user@prod-db-host "sqlplus / as sysdba @/opt/deploy/scripts/alter_procedure.sql"
                        '''
                    }
                }
            }
        }
    }
    
方案3:PKCS#12证书(适配企业PKI体系)

如果你的企业有统一的PKI证书管理体系,Oracle支持用PKCS#12证书进行身份认证:

  • 步骤1:数据库端配置证书认证
    将PKCS#12证书导入Oracle Wallet,然后创建绑定证书DN的数据库用户:
    CREATE USER cert_deploy_user IDENTIFIED EXTERNALLY AS 'CN=jenkins-prod,OU=DevOps,O=Company';
    GRANT CONNECT, CREATE PROCEDURE, ALTER PROCEDURE TO cert_deploy_user;
    
  • 步骤2:Jenkins流水线配置
    在Jenkins中存储PKCS#12证书及密码(可选),流水线中指定证书路径即可无密码连接:
    pipeline {
        agent any
        environment {
            PKCS12_FILE = credentials('prod-db-pkcs12')
            PKCS12_PWD = credentials('prod-db-pkcs12-pwd')
        }
        stages {
            stage('Deploy with Certificate') {
                steps {
                    sh '''
                        sqlplus /@prod-db << EOF
                        SET SQLNET.AUTHENTICATION_SERVICES=(TCPS)
                        SET WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/tmp/cert)))
                        @./scripts/deploy_trigger.sql
                        exit;
                        EOF
                    '''
                }
            }
        }
    }
    
通用注意事项
  • 权限最小化:给Jenkins对应的数据库用户仅分配PL/SQL部署所需的最小权限,绝对不要授予DBA级别的权限。
  • 凭据安全:所有敏感文件(Wallet、私钥、证书)都要存入Jenkins加密凭据库,禁止硬编码在流水线脚本中。
  • 预生产验证:务必在预生产环境完全复刻生产配置,验证无密码部署流程正常后再推到生产。

内容的提问来源于stack exchange,提问作者developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 12:02:43