如何通过Github Actions实现HANA DB实例的自动化启停?
可以用GitHub Actions实现HANA DB实例自动化启停
实现前提
- 拥有HANA DB实例的启停权限(自建环境需服务器访问权限,SAP BTP环境需BTP账号权限)
- GitHub仓库已配置必要的敏感信息(存储在Actions Secrets中)
- 明确HANA实例的启停命令或API调用方式
具体实现方法
1. 配置GitHub Secrets
在仓库的「Settings > Secrets and variables > Actions」中添加以下敏感信息(根据实际环境调整):
HANA_HOST:HANA实例主机地址HANA_USER:拥有启停权限的用户名HANA_PASSWORD:用户密码(或SSH私钥,推荐密钥认证)HANA_INSTANCE_NUMBER:HANA实例编号(如00)- 若为SAP BTP环境,需额外添加
BTP_USER、BTP_PASSWORD、BTP_GLOBAL_ACCOUNT、BTP_SUBACCOUNT、HANA_SERVICE_INSTANCE_NAME
2. 创建GitHub Actions工作流文件
在仓库根目录下创建.github/workflows/hana-start-stop.yml,根据你的HANA环境选择对应示例:
示例1:自建HANA实例(SSH方式)
支持手动触发和定时启停:
name: HANA DB 自动化启停 on: # 手动触发,可选择执行启动/停止操作 workflow_dispatch: inputs: action: description: '执行操作: start/stop' required: true default: 'start' # 定时触发:北京时间8点启动,22点停止(转换为UTC时间) schedule: - cron: '0 0 * * *' # UTC 0点 = 北京时间8点(启动) - cron: '0 14 * * *' # UTC 14点 = 北京时间22点(停止) jobs: execute-hana-action: runs-on: ubuntu-latest steps: - name: 安装SSH依赖 run: sudo apt-get update && sudo apt-get install -y sshpass openssh-client - name: 执行启停命令 env: HANA_HOST: ${{ secrets.HANA_HOST }} HANA_USER: ${{ secrets.HANA_USER }} HANA_PASSWORD: ${{ secrets.HANA_PASSWORD }} HANA_INSTANCE: ${{ secrets.HANA_INSTANCE_NUMBER }} ACTION: ${{ github.event.inputs.action || 'start' }} run: | if [ "$ACTION" = "start" ]; then # 通过SSH连接到HANA服务器执行启动命令 sshpass -p "$HANA_PASSWORD" ssh -o StrictHostKeyChecking=no $HANA_USER@$HANA_HOST "HDB start $HANA_INSTANCE" else # 执行停止命令 sshpass -p "$HANA_PASSWORD" ssh -o StrictHostKeyChecking=no $HANA_USER@$HANA_HOST "HDB stop $HANA_INSTANCE" fi
示例2:SAP BTP HANA Cloud实例(BTP CLI方式)
name: HANA Cloud 自动化启停 on: workflow_dispatch: inputs: action: description: '执行操作: start/stop' required: true default: 'start' schedule: - cron: '0 0 * * *' # 北京时间8点启动 - cron: '0 14 * * *' # 北京时间22点停止 jobs: hana-cloud-operation: runs-on: ubuntu-latest steps: - name: 安装BTP CLI run: | curl -LO https://github.com/SAP/btp-cli/releases/latest/download/btp-cli-linux-amd64.tar.gz tar -xzf btp-cli-linux-amd64.tar.gz sudo mv btp /usr/local/bin/ - name: 登录BTP平台 env: BTP_USER: ${{ secrets.BTP_USER }} BTP_PASSWORD: ${{ secrets.BTP_PASSWORD }} BTP_GLOBAL_ACCOUNT: ${{ secrets.BTP_GLOBAL_ACCOUNT }} BTP_SUBACCOUNT: ${{ secrets.BTP_SUBACCOUNT }} run: | btp login --user "$BTP_USER" --password "$BTP_PASSWORD" --global-account "$BTP_GLOBAL_ACCOUNT" --subaccount "$BTP_SUBACCOUNT" - name: 执行启停操作 env: HANA_INSTANCE: ${{ secrets.HANA_SERVICE_INSTANCE_NAME }} ACTION: ${{ github.event.inputs.action || 'start' }} run: | if [ "$ACTION" = "start" ]; then btp update service-instance --name "$HANA_INSTANCE" --parameters '{"data": {"state": "STARTED"}}' else btp update service-instance --name "$HANA_INSTANCE" --parameters '{"data": {"state": "STOPPED"}}' fi
关键注意事项
- 安全优先:所有敏感信息必须存储在GitHub Secrets中,禁止明文写入工作流文件;自建环境推荐使用SSH密钥认证代替密码
- 权限验证:确保执行命令的用户拥有HANA实例的启停权限(如自建环境的
sidadm用户) - 时区转换:定时任务的cron表达式基于UTC时间,需根据目标时区换算
- 环境兼容性:GitHub Runner默认使用Ubuntu环境,若需其他操作系统,需调整依赖安装命令
内容的提问来源于stack exchange,提问作者LilNasX
相关产品推荐
相关产品推荐

