Flyway 作业未执行命令

Flyway job is not executing command

问题

我有一个 flyway 作业,打算在 postgres 数据库上执行迁移。 作业似乎不是 运行 作业日志的命令和检查仅输出 flyway 文档。

预期

我希望日志检查是发生的迁移的概要。 我还安装了 pgweb 以允许观察,并且在连接到我的 postgres pod 后,很明显根本没有创建任何表。

这是 kubectl logs flyway-pod 的预期输出照片

我得到什么

这是 kubectl logs flyway-pod 的输出 如您所见,它打印使用指南而不是迁移发生的标志。

我试过的-解释

到目前为止,我一直在移动连接命令。

我已经注释掉了我尝试放置命令的位置。 我已经在 3 个地方试过了。

  1. 在原始 Flyway Docker文件中,无处可寻。
  2. 在飞路服务附近的 docker compose 文件中,别处无处。
  3. 在 Kubernetes Flyway 工作中,别无他处。

代码

这是我的文件和设置。

Kubernetes 文件

以下是用于设置我的集群的相关 Kubernetes 文件。

飞路工作:

这是 Flyway 作业:

kind: Job
metadata:
  name: flyway-migration-job
spec:
  template:
    spec:
      containers:
      - name: flyway
        image: flyway/flyway:6.3.1
        command: ["flyway", "-url=jdbc:postgresql://postgres-master:5432/wallet", "-user=test_user", "-password=testuser1234", "-schemas=wallet", "-connectRetries=60 migrate"]
      restartPolicy: OnFailure

Postgres 部署和服务

Postgres 部署文件

kind: Deployment
metadata:
  name: postgres-master
  labels:
    app: postgres-master
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres-master
  template:
    metadata:
      labels:
        app: postgres-master
    spec:
      containers:
        - name: postgres-master
          image: postgres:13
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 5432
          env:
            - name: POSTGRES_DB
              value: wallet
            - name: POSTGRES_USER
              value: test_user
            - name: POSTGRES_PASSWORD
              value: testuser1234
      

Postgres 服务

apiVersion: v1
kind: Service
metadata:
  name: postgres-master
  labels: 
    app: postgres-master
spec: 
  type: NodePort
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432
  selector: 
    app: postgres-master

Docker 个文件

由于我在本地构建图像并使用 kind 将它们拉入我的集群,因此我将附上相关的 Docker 文件。

飞行路线Docker文件

FROM flyway/flyway:7.7.3-alpine

COPY ./migrations/sql /flyway/sql/

#CMD ["flyway -url=jdbc:postgresql://postgres-master:5432/wallet -user=test_user -password=testuser1234  -connectRetries=60 -schemas=wallet migrate"]

Flyway SQL 脚本

这个脚本存储在migrations/sql

里面
CREATE TABLE wallet.transaction_events (
    transaction_version int,
    transaction_type VARCHAR(200),
    coins int,
    transaction_id VARCHAR(500),
    wallet_id VARCHAR(500)
)

Docker撰写

这是我在拉入 kind/my 集群之前用来构建图像的 docker 合成文件。

version: '3.5'
services:
  web:
    build:
      dockerfile: ./Dockerfile
    container_name: wallet-api-web
    depends_on: 
      - flyway
    ports: 
      - "8080:8080"
  postgres-db:
    build:
      dockerfile: ./utils/db.Dockerfile
    container_name: postgres-db
    environment:
      POSTGRES_PASSWORD: testuser1234
      POSTGRES_USER: test_user
      POSTGRES_DB: wallet
    image: postgres:13
    ports:
      - "5432:5432"
    restart: always

  flyway:
    build:
      dockerfile: ./migrations/Dockerfile
    #command: -url=jdbc:postgresql://postgres-master:5432/wallet -user=test_user -password=testuser1234 -schemas=wallet -connectRetries=60 migrate 
    container_name: flyway-migrations
    depends_on:
      - db
    image: flyway/flyway:6.3.1
    volumes:
      - ${PWD}/migrations/sql:/flyway/sql

我想我已经涵盖了为我的问题提供上下文所需的所有内容,但如果需要任何说明,请随时询问。

我非常感谢任何帮助使这些迁移工作的帮助。 谢谢

你的命令是数组语法,这意味着每个参数必须是一个单独的元素。 你在最后一个元素中有两个参数,flyway 不理解。

修复:

"-connectRetries=60 migrate"]

改为

"-connectRetries=60", "migrate"]