我正在创建一个Jenkins管道作业,我需要在标有某个标签的所有节点上运行作业.
因此,我正在尝试获取分配了特定标签的节点名称列表.(使用节点我可以获得标签getAssignedLabels())
该nodes-list中jenkins.model.Jenkins.instance.nodes似乎不包含主节点,我需要在我的搜索中包含.
我目前的解决方案是迭代jenkins.model.Jenkins.instance.computers并使用getNode()-method来获取节点.这是有效的,但在詹金斯的javadoc我正在阅读这个列表可能不是最新的.
从长远来看,我将添加(动态)云节点,我担心我将无法使用computers.
什么是正确获取所有当前节点的列表?
这就是我现在正在做的事情:
@NonCPS
def nodeNames(label) {
def nodes = []
jenkins.model.Jenkins.instance.computers.each { c ->
if (c.node.labelString.contains(label)) {
nodes.add(c.node.selfLabel.name)
}
}
return nodes
}
Run Code Online (Sandbox Code Playgroud) 根据我是使用-O3进行编译还是未经优化,编译器不会选择相同的function-template-instanciation。使用gcc(Debian 8.3.0-6)8.3.0。
由于疏忽,我在函数模板声明中有一个默认实现:
#pragma once
#include <iostream>
template <int>
void func() { std::cerr << "default impl\n"; } // normally no impl here
Run Code Online (Sandbox Code Playgroud)
及其专业:
#include "func.h"
template <>
void func<1>()
{
std::cerr << "special 1\n";
}
template <>
void func<2>()
{
std::cerr << "special 2\n";
}
Run Code Online (Sandbox Code Playgroud)
和主要功能。
#include "func.h"
int main(void)
{
func<1>();
func<2>();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译并运行可以g++ -Wall func.cpp main.cpp -o main && ./main得到:
special 1
special 2
Run Code Online (Sandbox Code Playgroud)
使用优化可以g++ -O3 -Wall func.cpp main.cpp -o main && ./main …
在我们的项目中,我们决定使用下划线为成员变量和一些私有/受保护方法添加前缀(因此使用" _").
在讨论期间,有人声称这是不鼓励的,因为某些平台上的某些编译器/链接器存在某些不兼容性.因为我们希望尽可能便携,所以我想确定.
我还认为在C中用下划线加上前缀全局变量可能是个问题.
这同样适用于C++ - 链接,如果适用,在哪些情况下(平台/编译器/链接器)?
既没有g ++(4.4和4.6)也没有clang ++(3.2),也没有覆盖,-Wall和-Wextra(+其他一些)或-Weverything分别给出了以下代码片段的警告:
class B {
char *t2;
char *t;
public:
B() : t2(t), t(new char[100]) {}
};
Run Code Online (Sandbox Code Playgroud)
我至少会期待一个关于未初始化(成员)变量使用的小警告.
有什么我想念的吗?这是一个想要的"无警告" - 场景.我(现在已经)我的软件中至少有一个很难找到的错误.
编辑:从这个新问题可以看出,我意识到在某些情况下,封面警告这个问题.
我正在阅读这篇文章http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/,第一段代码就是这个,显然是从linux内核中获取的:
#define min(x, y) ({ \
typeof(x) _min1 = (x); \
typeof(y) _min2 = (y); \
(void) (&_min1 == &_min2); \
_min1 < _min2 ? _min1 : _min2; })
Run Code Online (Sandbox Code Playgroud)
现在为什么他们需要这(void) (&_min1 == &_min2);条线?
我的手写文档/用户指南(用sphinx用ReStructuredText编写)变得非常大,所以我开始在子目录中组织我的.rst文件.
在index.rst我包括subindex.rst每个子目录的一个子目录,其本身包括其他.rst子目录的其他子目录.
index.rst:
.. include:: subdir1/subindex.rst
.. include:: subdir2/subindex.rst
Run Code Online (Sandbox Code Playgroud)
subdir1/subindex.rst:
.. include:: file1.rst
.. include:: file2.rst
Run Code Online (Sandbox Code Playgroud)
原则上这很有效,除了sphinx以递归方式查找.rst它试图解析的-files.不改变当前工作的目录.因此,当看到include:: file1.rst内部时它失败了subdir1.
我正在解决这个问题,设置exclude_pattern忽略我的子目录.这似乎不对.
包含子.rst文件的-file 的正确方法是什么?
我在循环中使用以下代码将大约6000个文本文件读入内存:
void readDocs(const char *dir, char **array){
DIR *dp = opendir(dir);;
struct dirent *ep;
struct stat st;
static uint count = 0;
if (dp != NULL){
while (ep = readdir(dp)){ // crawl through directory
char name[strlen(dir) + strlen(ep->d_name) + 2];
sprintf(name, "%s/%s", dir, ep->d_name);
if(ep->d_type == DT_REG){ // regular file
stat(name, &st);
array[count] = (char*) malloc(st.st_size);
int f;
if((f = open(name, O_RDONLY)) < 0) perror("open: ");
read(f, array[count], st.st_size));
if(close(f) < 0) perror("close: ");
++count;
}
else if(ep->d_type == DT_DIR …Run Code Online (Sandbox Code Playgroud) 我找不到如何指定标签.应该是这样的
ADD_TEST( FirstTest RunSomeProgram "withArguments" )
SET_TESTS_PROPERTIES( FirstTest PROPERTIES LABEL "TESTLABEL" )
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何设置其中一个标签,我可以使用
ctest -S someScript -L TESTLABEL
Run Code Online (Sandbox Code Playgroud) 在创建窗口时如何启用多重采样?我应该如何初始化OpenGL以匹配?
我开始使用ZeroMQ for IPC并制作了一个简单的echo-client/server,我对一件事情感到惊讶.这是C++代码(使用zmq.hpp和zmq_addon.hpp).
服务器:
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REP);
socket.bind("ipc:///tmp/machine-1");
while (1) {
zmq::multipart_t m;
m.recv(socket);
int i = m.poptyp<int>();
i++;
m.addtyp<int>(i);
m.send(socket);
}
Run Code Online (Sandbox Code Playgroud)
客户:
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REQ);
socket.connect("ipc:///tmp/machine-1");
int i = 0;
while (1) {
int save = i;
zmq::multipart_t m;
m.addtyp<int>(i);
m.send(socket);
m.recv(socket);
i = m.poptyp<int>();
if (i != (save + 1))
break;
if ((i % 100000) == 0)
std::cerr << "i : " << i<< "\n";
}
Run Code Online (Sandbox Code Playgroud)
我按预期工作.客户端发送一个int,服务器加一个并发回.
现在我不明白的魔力:我意识到,我可以并行运行几次客户端,并且它会继续正常工作,为每个客户端正确. …