我似乎无法从这样的工具中找到最明显的 CI 功能:在另一个项目的管道完成后运行项目管道。您可以这样做,trigger
但仅限于下游触发,这与您想要的相反,如果您的项目是 20 个其他项目的核心依赖项,而这些项目都需要重建。
在这种情况下,您需要能够定义如下内容:
项目A:没什么特别的,只是一个普通的管道
项目 B,“依赖于”项目 A:
.gitlab-ci.yml
from_upstream:
stage: pre
trigger:
project: ProjectA
Run Code Online (Sandbox Code Playgroud)
它的作用是每当 ProjectA 管道[成功]完成时触发 ProjectB 构建。
相反,您必须以类似的方式声明 ProjectA 中的所有数十个下游,这是愚蠢且适得其反的,特别是当 ProjectA 是一个在各处不断重用的核心库时。
那么,有人可以解释一下为什么 GitlabCI 缺少一个在 Bamboo 和 Hudson/Jenkins 中已有数十年的明显功能(即使在 EE 中也不可用)吗?我如何使用 Gitlab-CI 做我需要的事情?
更新:似乎上游/下游的概念对某些人来说确实令人困惑,所以只是澄清一下:上游 项目 A是而且必须始终与下游 项目 B分离,因为关注点分离是一件事,上游维护者不能也不应该可能不了解他们的项目如何在下游使用。
因此,所需的功能(同样,在 Bamboo 和 Jenkins 中存在了数十年)是下游管道在上游管道上声明被动触发器,而不是像目前在 Gitlab-CI 中实现的那样使用主动触发器。
假设我具有以下实体域:
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE")
public abstract class Entity1 {
//some attributes
}
@Entity
@DiscriminatorValue("T1")
public class Entity2 extends Entity1 {
@OneToMany(fetch=FetchType.EAGER, cascade = { CascadeType.ALL }, mappedBy="parent")
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private Set<Entity1Detail> details = new HashSet<Entity1Detail>();
}
@Entity
public class Entity1Detail {
@ManyToOne
@JoinColumn(name="REF")
private Entity2 parent;
@Basic
private Integer quantity;
}
@Entity
@DiscriminatorValue("T2")
public class Entity3 extends Entity1 {
//some other attributes
}
Run Code Online (Sandbox Code Playgroud)
当我执行JPQL查询时:
select e from Entity1 e left join e.details d where d.quantity > 1
Run Code Online (Sandbox Code Playgroud)
它运行良好(左联接; P)。但是,当我尝试使用JPA2标准API构建相同的查询时:
CriteriaBuilder builder …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Kafka 构建相关系统。假设有一个服务A执行数据处理,并且有数千个客户端B向它提交作业。B是短暂的,它们出现在网络上,将数据推送到A,然后发生两件重要的事情:
(这与网格计算或 mpi 没有什么不同)。
这两点都应该使用一个众所周知的概念来实现correlationId
:B拥有一个唯一的 id(在我的例子中是 UUID),它在标头中发送给A,而A又使用它作为Reply-To
主题来发送状态更新。这意味着它必须即时创建主题,它们无法预先确定。
我已经auto.create.topics.enable
打开了,它确实动态地创建了主题,但是现有的消费者不知道它们并且需要重新启动 [我想是为了获取主题元数据,如果我理解文档正确的话]。我还检查了消费者的metadata.max.age.ms
设置,但它似乎没有帮助,即使我将其设置为非常低的值。
据我所知,这还没有得到解答,即:kafka 过滤/动态主题创建,kafka 消费者动态检测添加的主题,Kafka 生产者可以创建主题和分区吗?或回答不满意。
由于有数百个A和数千个B,我不可能使用共享主题或类似的东西,以免我的网络过载。我可以使用 Kafka'sAdminTools
或任何它的名字来预先创建主题,但我觉得它有点傻(即使我看到人们使用它与 Zookeeper 和 Kafka 基础设施本身交谈的现实生活中的例子)。
所以问题是,有没有一种方法可以动态创建 Kafka 主题,让消费者和生产者都知道它而无需重新启动或其他任何事情?而且,在最坏的情况下,AdminTools 真的会帮助它吗?我必须在哪一边使用它 - A还是B?
Kafka 0.11, Java 8
更新AdminClient
无论出于何种原因,
创建主题都无济于事,LEADER_NOT_AVAILABLE …