Flyway作业未执行命令
Posted
技术标签:
【中文标题】Flyway作业未执行命令【英文标题】:Flyway job is not executing command 【发布时间】:2021-11-08 16:09:12 【问题描述】:问题
我有一个 flyway 工作,旨在对 postgres 数据库执行迁移。 该作业似乎没有运行命令,并且检查作业日志仅输出飞行路线文档。
期望
我希望日志检查是所发生迁移的概要。 我还安装了 pgweb 以实现可观察性,并且在连接到我的 postgres pod 后,很明显根本没有创建任何表。
这是 kubectl logs flyway-pod 预期输出的照片
我得到了什么
这是 kubectl logs flyway-pod 的输出 如您所见,它打印的是使用指南,而不是迁移发生的标志。
我尝试过的-解释
到目前为止,我一直在移动连接命令。
我已经注释掉了我尝试放置命令的位置。 我在 3 个地方都试过了。
-
在原始 Flyway Dockerfile 中,别无其他。
在 flyway 服务附近的 docker compose 文件中,其他任何地方都没有。
在 Kubernetes Flyway 工作中,别无他处。
代码
这是我的文件和设置。
Kubernetes 文件
以下是用于设置我的集群的相关 Kubernetes 文件。
Flyway 工作:
这是 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 将它们拉入集群时,我将附加相关的 Dockerfile。
Flyway Dockerfile
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 compose 文件。
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
我想我已经涵盖了为我的问题提供上下文所需的所有内容,但如果需要任何说明,请随时询问。
对于让这些迁移正常工作的任何帮助,我非常感激。 谢谢
【问题讨论】:
Please do not upload images of code/errors when asking a question. 【参考方案1】:你的命令是数组语法,这意味着每个参数必须是一个单独的元素。 你在最后一个元素中有两个参数,flyway不理解。
修复:
"-connectRetries=60 migrate"]
改成
"-connectRetries=60", "migrate"]
【讨论】:
以上是关于Flyway作业未执行命令的主要内容,如果未能解决你的问题,请参考以下文章
flyway 命令行工具 - 重新执行失败的 DDL 的选项是啥?