Compare commits

..

No commits in common. "cd547637bb07c76fa6f4b2ad569961819839f873" and "adfa62854a74608ec4ef8af9b310eb549fd77e01" have entirely different histories.

3 changed files with 20 additions and 49 deletions

View File

@ -1,10 +1,10 @@
# 复制到 tracks .gitea/workflows/deploy.yml # 复制到 tracks .gitea/workflows/deploy.yml
# push master → prod;push test → test
name: Build and Deploy name: Build and Deploy
on: on:
push: push:
branches: [master, test] branches: [master, main]
workflow_dispatch:
env: env:
CSPROJ: src/TrackCenter.Api/TrackCenter.Api.csproj CSPROJ: src/TrackCenter.Api/TrackCenter.Api.csproj
@ -21,47 +21,14 @@ jobs:
- name: Build and deploy - name: Build and deploy
run: | run: |
set -euxo pipefail set -euxo pipefail
REF="${{ gitea.ref_name }}" export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
case "$REF" in TAG="${{ gitea.sha }}"
test) TARGET=test ;; IMG="${{ env.TCR_REGISTRY }}/${{ env.TCR_NAMESPACE }}/${{ env.IMAGE_NAME }}:${TAG}"
master) TARGET=prod ;;
*) echo "unsupported branch: $REF"; exit 1 ;;
esac
SHA="${{ gitea.sha }}"
REPO="${{ gitea.repository }}" REPO="${{ gitea.repository }}"
test -n "$REPO" && [[ "$REPO" == */* ]] test -n "$REPO" && [[ "$REPO" == */* ]]
echo "REPO=$REPO TAG=$TAG host=$(hostname)"
case "$TARGET" in
test) TAG="test-${SHA}" ;;
*) TAG="${SHA}" ;;
esac
IMG="${{ env.TCR_REGISTRY }}/${{ env.TCR_NAMESPACE }}/${{ env.IMAGE_NAME }}:${TAG}"
echo "TARGET=$TARGET REF=$REF REPO=$REPO TAG=$TAG host=$(hostname)"
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
unset NAMESPACE
cd /data/k3s cd /data/k3s
./scripts/ci-publish-container.sh "$REPO" "${{ env.CSPROJ }}" \ ./scripts/ci-publish-container.sh "$REPO" "${{ env.CSPROJ }}" \
"${{ env.IMAGE_NAME }}" "$TAG" "$SHA" "${{ env.IMAGE_NAME }}" "$TAG" "$TAG"
case "$TARGET" in
test)
export KUBECONFIG=/etc/rancher/k3s/k3s-test.yaml
export NAMESPACE=test
export MANIFEST_ROOT=/data/k3s-test
;;
*)
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
export NAMESPACE=prod
export MANIFEST_ROOT=/data/k3s
;;
esac
if [[ ! -f "$KUBECONFIG" ]]; then
echo "FAIL: missing KUBECONFIG=$KUBECONFIG host=$(hostname) uid=$(id -u)"
ls -la /etc/rancher/k3s/ /root/.kube/ 2>/dev/null || true
exit 1
fi
./scripts/ci-deploy-api.sh "${{ env.DEPLOY_NAME }}" \ ./scripts/ci-deploy-api.sh "${{ env.DEPLOY_NAME }}" \
"${{ env.CONTAINER_NAME }}" "$IMG" "${{ env.CONTAINER_NAME }}" "$IMG"

View File

@ -14,17 +14,17 @@ public static class WarningCalcServiceExtension
{ {
public static void AddWarningCalcServices(this IServiceCollection services, IConfiguration conf) public static void AddWarningCalcServices(this IServiceCollection services, IConfiguration conf)
{ {
// Kafka 已按集群隔离,主题/消费组不再拼 Environment 后缀 var env = "-" + conf.GetValue<string>("Environment")!.ToLower();
// 预警信号批处理后台任务 // 预警信号批处理后台任务
services.AddHostedService<WarningCalcBackgroundService>(); services.AddHostedService<WarningCalcBackgroundService>();
// 预警信号 // 预警信号
RegisterConsumer<WarningSignalKey, WarningSignal>(services, conf, GlobalConst.WarningKafkaGroup, new[] { GlobalConst.WarningKafkaTopic }); RegisterConsumer<WarningSignalKey, WarningSignal>(services, conf, GlobalConst.WarningKafkaGroup + env, new[] { GlobalConst.WarningKafkaTopic + env });
RegisterProducer<WarningSignalKey, WarningSignal>(services, conf, GlobalConst.WarningKafkaTopic); RegisterProducer<WarningSignalKey, WarningSignal>(services, conf, GlobalConst.WarningKafkaTopic + env);
// 预警信号DLX // 预警信号DLX
RegisterConsumer<int, WarningSignal>(services, conf, GlobalConst.WarningDLXKafkaGroup, new[] { GlobalConst.WarningDLXKafkaTopic }); RegisterConsumer<int, WarningSignal>(services, conf, GlobalConst.WarningDLXKafkaGroup + env, new[] { GlobalConst.WarningDLXKafkaTopic + env });
RegisterProducer<int, WarningSignal>(services, conf, GlobalConst.WarningDLXKafkaTopic); RegisterProducer<int, WarningSignal>(services, conf, GlobalConst.WarningDLXKafkaTopic + env);
} }
private static void RegisterConsumer<TKey, TValue>(IServiceCollection services, IConfiguration conf, string groupId, string[] subTopic) private static void RegisterConsumer<TKey, TValue>(IServiceCollection services, IConfiguration conf, string groupId, string[] subTopic)

View File

@ -1,4 +1,5 @@
using Confluent.Kafka; using Confluent.Kafka;
using Microsoft.Extensions.Configuration;
using TrackCenter.Application.Services.Warning.Signals; using TrackCenter.Application.Services.Warning.Signals;
using TrackCenter.Domain.Aggregates.TrackDetailsAggregate; using TrackCenter.Domain.Aggregates.TrackDetailsAggregate;
@ -11,11 +12,13 @@ public sealed class WarningSignalPublisher : IDisposable, ISingletonDependency
{ {
private readonly IProducer<WarningSignalKey, WarningSignal> _producer; private readonly IProducer<WarningSignalKey, WarningSignal> _producer;
private readonly IProducer<int, WarningSignal> _dlxProducer; private readonly IProducer<int, WarningSignal> _dlxProducer;
private readonly string env;
public WarningSignalPublisher(IProducer<WarningSignalKey, WarningSignal> producer, IProducer<int, WarningSignal> dlxProducer) public WarningSignalPublisher(IProducer<WarningSignalKey, WarningSignal> producer, IProducer<int, WarningSignal> dlxProducer, IConfiguration conf)
{ {
_producer = producer; _producer = producer;
_dlxProducer = dlxProducer; _dlxProducer = dlxProducer;
env = "-" + conf.GetValue<string>("Environment")!.ToLower();
} }
public void PublishSignal(WarningSignalType type, List<TrackDetailsIndex> tracks) public void PublishSignal(WarningSignalType type, List<TrackDetailsIndex> tracks)
@ -26,7 +29,7 @@ public sealed class WarningSignalPublisher : IDisposable, ISingletonDependency
public void PublishSignal(WarningSignalType type, TrackDetailsIndex track) public void PublishSignal(WarningSignalType type, TrackDetailsIndex track)
{ {
_producer.Produce(GlobalConst.WarningKafkaTopic, new Message<WarningSignalKey, WarningSignal> _producer.Produce(GlobalConst.WarningKafkaTopic + env, new Message<WarningSignalKey, WarningSignal>
{ {
Key = new WarningSignalKey(type, track.OrderId), Key = new WarningSignalKey(type, track.OrderId),
Value = WarningSignal.FromTrack(track, type) Value = WarningSignal.FromTrack(track, type)
@ -35,12 +38,13 @@ public sealed class WarningSignalPublisher : IDisposable, ISingletonDependency
public Task PublishSignalAsync(Message<WarningSignalKey, WarningSignal> msg, CancellationToken ct = default) public Task PublishSignalAsync(Message<WarningSignalKey, WarningSignal> msg, CancellationToken ct = default)
{ {
return _producer.ProduceAsync(GlobalConst.WarningKafkaTopic, msg, ct); return _producer.ProduceAsync(GlobalConst.WarningKafkaTopic + env, msg, ct);
} }
public Task PublishDlxSignalAsync(Message<int, WarningSignal> message, CancellationToken ct = default) public Task PublishDlxSignalAsync(Message<int, WarningSignal> message, CancellationToken ct = default)
{ {
return _dlxProducer.ProduceAsync(GlobalConst.WarningDLXKafkaTopic, message, ct); return _dlxProducer.ProduceAsync(GlobalConst.WarningDLXKafkaTopic + env, message, ct);
} }
public void Dispose() public void Dispose()