这个问题结合了我不完全理解的两个主题
通过阅读有关F#中异步的文章,我遇到了Agent/MailboxProcessors的主题,它可用于实现反应状态机.是否可以使用C#5中的新异步/等待功能来实现C#中类似的功能,或者是否已经存在更适合的类似模拟?
我们在我的软件开发课上一直在学习面向Agent的编程,而我的教授是他的一个重要支持者,他一生都在使用它.
我的问题是从设计和实现的角度来看使用代理的真正优点/缺点.从我的教授的角度来看,Agent可以比通过普通的OOP方法更容易地重建非常复杂的操作.但在我看来,代理在复杂环境中编程同样麻烦.它们受各种并发,时序和数据完整性问题的影响.从编码员的角度来看,代理代码相当复杂,比普通的OOP代码更难理解.
有人可以让我了解软件代理在实际开发中的看法以及学术活动之外的优势/劣势是什么?
我正在尝试使用Connman来管理我的嵌入式系统的WiFi连接,因为它可以自动处理任何类型的保护.
在交互模式下,它非常简单:
在我的系统上,用户使用远程(Web)应用程序输入WiFi凭证(SSID,密码).然后我将使用此信息使用脚本设置connman.
目标是避免用户选择要设置的保护类型.我的意思是,大多数用户只输入SSID /密码,但他们不知道它是WPA-PSK还是WEP连接.
我正在阅读文档,但我不确定哪种方法是正确的:
但据我了解,我需要指定安全类型:
安全性:网络的安全类型.可能的值是'psk'(WPA/WPA2 PSK),'ieee8021x'(WPA EAP),'none'和'wep'.未设置时,如果配置了EAP类型,则默认值为"ieee8021x";如果存在密码短语,则为"psk",否则为"none".
如果省略该字段,似乎不处理'wep'.
在这里,我理解它需要一个"代理"来提供密码,因此我担心我无法以编程方式发送它.
你有什么建议吗?
现在我可以通过这种方式成功配对并将手机连接到我的机器,而无需任何用户交互:
$bluetoothctl
#power on
#discoverable on
#pairable on
#agent NoInputNoOutput
#default-agent
Run Code Online (Sandbox Code Playgroud)
我从我的手机中搜索 BT 设备,它会自动配对和连接。现在我有两个问题:
它仍然要求授权服务:
授权服务
[代理] 授权服务 0000110e-0000-1000-8000-00805f9b34fb(是/否):
但这不好,因为我已经指定了NoInputNoOutput!
trust但出于同样的原因,我需要自动执行此操作。一般来说,是否有任何可靠的 C++ 库来处理蓝牙连接和 A2DP 和 HFP 等常见配置文件?
我正在使用TFS执行每晚构建,其中包括使用TFS测试代理的几个步骤.我正在运行最新版本的TFS /测试代理(2015年 - 更新3),目前还没有其他版本正在运行.通常(可能是一半时间),当夜间作业运行时,"Visual Studio测试代理部署"步骤失败,并显示以下错误:
该作业已被放弃,因为代理程序Agent-XXX未更新锁定.确保代理正在运行,而不是休眠,并且没有丢失与服务的通信.
这是由于测试代理的日志文件(在_diag下)中发现的错误:
此代理的会话已存在.下次重试前睡30秒.
Microsoft.TeamFoundation.DistributedTask.WebApi.TaskAgentSessionConflictException:任务代理Agent-XXX已拥有所有者XXX的活动会话.
我发现此问题的解决方案是重新启动运行测试代理的服务器,这会清除所有死会话,并且在服务器启动备份后,测试运行正常.我认为这实际上是在前面提到的帖子中所做的.重置配置的结果是重新启动服务.
虽然在链接文章中作为解决方案呈现,但它只是暂时的.即使服务器重新启动并且构建成功运行,第二天问题也会再次出现,需要手动干预才能使构建运行.
我可以安排一项任务来重置服务,甚至可以在每晚构建运行之前直接重启服务器,但它让我感觉像是绷带而不是修复.有没有人以前经历过这个问题,如果有的话,有没有办法防止它首先出现?
我只是设置了一个在我的主要测试运行前5分钟运行的构建,它运行Bat脚本以重新启动托管我的测试代理的所有服务器.这是一种解决方法,但似乎解决了这个问题.希望有一天有人可以提出比这更好的解决方案,但是现在,我必须在TFS中运行自动化测试.
我现在有三台服务器,这三台服务器都出现了同样的问题,但很难准确确定它何时发生.在不产生停机时间的情况下扩展变通方法,这证明是非常具有挑战性的.
更好的一天来了,我将TFS升级到2018,并将构建代理升级到最新版本,此问题不再发生,我认为它是旧构建代理中的一个错误.我仍然没有原始版本的构建代理的解决方案...
我有一个Jenkins管道,包括3个阶段。它包含在不同代理中运行的多个正在进行的内部版本。代理通过SSH启动。我随机遇到一些构建中止并显示以下消息。
远程文件操作失败:/ home / jenkins / workspace / WORKSPACE @ 3,位于hudson.remoting.Channel@759ed7a6 :: hudson.remoting.ChannelClosedException:通道“未知”:远程调用失败。频道正在关闭或已关闭
获取以下错误日志:
Error when executing always post condition:
java.io.IOException: remote file operation failed: /home/jenkins/workspace/WORKSPACE@3 at hudson.remoting.Channel@759ed7a6:<agent_label>: hudson.remoting.ChannelClosedException: Channel "unknown": Remote call on <agent_label> failed. The channel is closing down or has closed down
at hudson.FilePath.act(FilePath.java:1043)
at hudson.FilePath.act(FilePath.java:1025)
at hudson.FilePath.mkdirs(FilePath.java:1213)
at org.jenkinsci.plugins.durabletask.FileMonitoringTask$FileMonitoringController.<init>(FileMonitoringTask.java:120)
at org.jenkinsci.plugins.durabletask.BourneShellScript$ShellController.<init>(BourneShellScript.java:198)
at org.jenkinsci.plugins.durabletask.BourneShellScript$ShellController.<init>(BourneShellScript.java:190)
at org.jenkinsci.plugins.durabletask.BourneShellScript.launchWithCookie(BourneShellScript.java:111)
at org.jenkinsci.plugins.durabletask.FileMonitoringTask.launch(FileMonitoringTask.java:71)
at org.jenkinsci.plugins.workflow.steps.durable_task.DurableTaskStep$Execution.start(DurableTaskStep.java:176)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:229)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:153)
at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)
at sun.reflect.GeneratedMethodAccessor12277.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) …Run Code Online (Sandbox Code Playgroud) 我正在为我们的组织制定Azure Devops的过程,尽管我已经在某种程度上进行了一些工作,但我仍然不理解我认为应该的几个概念。
我已经设置了一个部署池(“组织设置”>“部署池”),并使用该脚本在我的Dev,Test和Prod服务器上安装和配置了代理,并且已经能够成功将代码部署到它们
我现在已经能够使用“ Azure托管”选项来构建我的项目,但是我真的很想使用本地托管选项,但是当查看“代理程序池”(“组织设置”>“代理程序池”)时,我只能看到生产服务器和它不会让我使用该版本。我单击了“下载代理”按钮,但它使用相同的powershell命令.config.cmd命令下载了我在“部署池”阶段已设置的代理。
据我所知,“代理池”中的代理与“部署池”之间没有区别,但是由于我看不到代理池中的代理,因此我显然缺少了一些东西。
谁能帮助我了解我可能错过的内容,以及为什么有两种完全不同的方式下载同一代理?
非常感谢!
根据本教程,我尝试使Java代理正常工作。 https://www.baeldung.com/java-instrumentation#loading-a-java-agent
我知道[Agent] Transforming class TestApplication
我没有错误,但是看不到转换类的任何效果。
最终,我希望同时使静态负载和动态负载都能工作,但现在我主要关注静态方式。
public class Static_Agent {
public static void premain(String agentArgs, Instrumentation inst) {
String[] tokens = agentArgs.split(";");
String className = tokens[0];
String methodName = tokens[1];
System.out.println(">> "+className);
System.out.println(">> "+methodName);
transformClass(className, methodName, inst);
}
public static void transformClass(String className, String methodName, Instrumentation instrumentation) {
Class<?> targetCls = null;
ClassLoader targetClassLoader = null;
// see if we can get the class using forName
try {
targetCls = Class.forName(className);
targetClassLoader = targetCls.getClassLoader();
transform(targetCls, methodName, targetClassLoader, …Run Code Online (Sandbox Code Playgroud) 在 Azure 管道的文档中,我读到:
每个代理一次只能运行一项作业。要并行运行多个作业,您必须配置多个代理。
在自托管代理上运行管道时,默认情况下,在两次连续运行之间不会清除任何子目录。因此,您可以进行增量构建和部署,前提是已实现任务以利用它。您可以使用作业的工作区设置覆盖此行为。
管道工件提供了一种在管道中的阶段之间或不同管道之间共享文件的方法。它们通常是需要由另一个作业使用或部署的构建过程的输出。
作为初学者,看完这篇,我有一些疑惑:
Pipeline.Workspace?(很明显,在并行作业运行的情况下,它需要多个代理)。可以请一些人帮我清除这些疑虑吗?
我正在试验多级 Azure 管道,部署到 Windows 虚拟机。由于多级管道不支持部署组,我正在使用环境。尽管向环境添加虚拟机资源与向部署组添加目标非常相似,但我注意到命名约定略有不同。
当 PowerShell 脚本运行以创建作为部署组目标的代理时,创建的 Windows 服务名为vstsagent.{组织名称}.{项目名称}.{目标 VM 名称}。这使得 Windows 服务名称对于每个项目都是唯一的。
当 PowerShell 脚本运行以创建作为环境资源的代理时,默认情况下创建的 Windows 服务名为vstsagent.{组织名称}..{目标 VM 名称} 。这意味着默认情况下,同一组织中部署到同一虚拟机的所有项目都将使用相同的 Windows 服务名称作为代理。
当我已经为项目设置了 VM 代理并想要将资源添加到同一组织中指向同一 VM 的第二个项目时,我经常会遇到问题。
当 PowerShell 脚本在虚拟机上运行以创建第二个代理时,它会识别出服务器上已存在同名服务vstsagent.{组织名称}..{目标虚拟机名称},并尝试替换它。大约 25% 的情况下会失败。在这种情况下,我尝试使用.\config removePowerShell 手动删除现有的 Windows 服务,然后重新运行第二个代理的 PowerShell 脚本。PowerShell 脚本运行时似乎没有错误,并表示它已注册代理。但是,现在如果我尝试在第一个或第二个项目中运行管道,它会失败,并显示“无法部署到虚拟机 '{target VM name}',因为机器处于脱机状态。 ”。所以我最终得到了两个无法再部署的项目。
将多个项目部署到同一个虚拟机上肯定是比较常见的。当 PowerShell 脚本尝试创建第二个代理无法替换现有代理时,处理这种情况的最佳方法是什么?有没有某种方法可以强制脚本仅使用现有代理而不尝试替换它?或者,在 Azure DevOps GUI 中将资源添加到环境时,是否有某种方法可以指定我要重用另一个项目中的资源/代理?