小编Eth*_*n T的帖子

如何在Jenkins的Docker容器中运行多个命令?

我有一个稍微复杂的构建和测试过程,我想在Docker容器中运行。由于被测软件启动了一些xterm窗口,因此我正在容器中运行X服务器和VNC supervisord来启动它们。然后,当容器supervisord作为ENTRYPOINT 运行时,我可以使用手动启动构建和测试过程docker exec

我无法确定使用Jenkins和Docker Pipeline插件执行此操作的方法。当前版本的插件似乎存在一些限制,我无法充分解决。这是基本思想:

node {
    stage('Fetch installer') {
        // SCM commands go here
    }

    def image = docker.image('metatest')
    image.inside() {
        stage('Run installer') {
            sh "./installer.sh"
        }
        stage('Run tests') {
            sh "/opt/custom/run_tests.sh"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,此方法被打破了,因为该image.inside()方法将覆盖默认用户(将其设置为Jenkins的用户ID)和ENTRYPOINT。我需要能够使用默认的root用户启动Docker容器,因为X服务器进程必须是root用户。但是,我需要以Jenkins的非root用户身份在容器中运行安装和测试,以便Jenkins可以管理输出材料。

作为记录,image.inside()在启动Docker容器时设置了许多非常有用的参数:

docker run -t -d -u 113:123 \
  -w "/var/lib/jenkins/workspace/TestProj" \
  -v "/var/lib/jenkins/workspace/TestProj:/var/lib/jenkins/workspace/TestProj:rw" \
  -v "/var/lib/jenkins/workspace/TestProj@tmp:/var/lib/jenkins/workspace/TestProj@tmp:rw" \
  -e ******** -e ******** -e ******** -e ******** -e ******** \
  -e ******** -e …
Run Code Online (Sandbox Code Playgroud)

jenkins docker

5
推荐指数
0
解决办法
1520
查看次数

给定 HFOV 和 VFOV,如何为通用鱼眼镜头生成失真系数?

我想模拟某个相机的光学行为,只知道以下参数:

  • 这是一个鱼眼镜头
  • 焦距毫米
  • 传感器尺寸(水平和垂直)mm
  • 以像素为单位的传感器分辨率(水平和垂直)
  • 以度或弧度为单位的 HFOV 和 VFOV

我的目标是将空间中的一组 3D 点转换为相机传感器上的 2D 点。看起来cv2.projectPoints()可以做到这一点,但它需要一组失真系数,K 1,K 2,P 1,P 2等。

大多数人通过使用真实相机进行校准来获得这些系数。我想使用名义相机。一个这样的例子是 GoPro,一个人发现了这些值:

[[-2.57614020e-01, 8.77086999e-02, -2.56970803e-04, -5.93390389e-04, -1.52194091e-02]]
Run Code Online (Sandbox Code Playgroud)

我无法通过我列出的输入变量找到对这些参数的解释,而且我对光学的了解不够,无法知道如何生成它们。

如何生成projectPoints()用于名义鱼眼镜头所需的失真系数?

python camera opencv

5
推荐指数
0
解决办法
664
查看次数

为什么不能构造包含ostringstream成员的对象?

我有以下类示例,从较大的项目中简化.它基于一个日志框架,它使用记录器的作用域来终止析构函数中的日志条目.

下面的代码将无法编译,因为构造函数是一个隐式删除的函数(编辑:不是真),这似乎与std::ostringstream对象有关.我对此感到困惑,因为我认为我应该能够直接构造一个std::ostringstream,这意味着我应该能够直接构造一个Container对象.

#include <iostream>
#include <sstream>

class Container {
  public:
    std::ostringstream  bufferStream;

  public:
    Container();    // constructor
    ~Container();
};

Container::Container() {
    bufferStream << "Hello ";
}

Container::~Container() {
    std::cout << bufferStream.str() << " [end]" << std::endl;
}

// === Main method ===

int main() {

    Container().bufferStream << "world";   // works fine

    {                                      // causes tons of compiler errors
        Container cont = Container();
        cont.bufferStream << "world!";
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,标记为"正常工作"的行就是这样做的.它似乎实例化了一个匿名Container对象,它包含一个新的std::ostringstream …

c++ ostringstream deleted-functions c++11

3
推荐指数
1
解决办法
543
查看次数

CMake 不包含子模块 B 中子模块 A 的头目录

我有一个 CMake 项目,如下所示:

project/
  CMakeLists.txt
  subprojectA/
    CMakeLists.txt
    include/
      headerA.hpp
    src/
      libraryA.cpp
  subprojectB/
    CMakeLists.txt
    src/
      mainB.cpp
Run Code Online (Sandbox Code Playgroud)

“库”子项目 A 被编译为静态库,成为 libsubprojectA.a。“主”项目 B 被编译为二进制文件并依赖于库。mainB.cpp 包含对 headerA.hpp 的引用。

这是 subprojectA/CMakeLists.txt:

project(SubProjectA)
include_directories(include)
add_library(subprojectA STATIC src/libraryA.cpp)
set(${PROJECT_NAME}_INCLUDE_DIRS
    ${PROJECT_SOURCE_DIR}/include
    CACHE INTERNAL "${PROJECT_NAME}: Include Directories" FORCE)
Run Code Online (Sandbox Code Playgroud)

这是 subprojectB/CMakeLists.txt:

project(SubProjectB)
include_directories(${SubProjectA_INCLUDE_DIRS})
add_executable(mainBinary src/mainB.cpp)
target_link_libraries(mainBinary subprojectA)
Run Code Online (Sandbox Code Playgroud)

主项目 CMakeLists.txt 如下所示:

project(Project)
add_subdirectory(subprojectB)
add_subdirectory(subprojectA)
Run Code Online (Sandbox Code Playgroud)

请注意,主项目 subprojectB 列在 subprojectA之前

问题就在这里。当我第一次在此项目上运行“cmake”时,${SubProjectA_INCLUDE_DIRS}未在 SubProjectB 中设置。

我认为正在发生的事情是 SubProjectB 的 CMakeLists 在${SubProjectA_INCLUDE_DIRS}尚未设置时首先加载。结果,它将自己的包含路径设置为空字符串。然而,即使libsubprojectA.a之前构建成功mainBinary,包含路径也已预先设置为空。结果,我在尝试执行以下操作时收到此错误mainBinary

subprojectB/src/mainB.cpp:1:23: fatal error: …
Run Code Online (Sandbox Code Playgroud)

c++ cmake

3
推荐指数
1
解决办法
4495
查看次数

如何“选择”spaCy 模式匹配的部分,而不是整个匹配?

在spaCy基于规则的模式匹配与匹配跨度的起始和结束字符一起返回匹配ID,但我没有看到任何东西,上面写着如何确定哪些跨度的部分由那名令牌的文档中匹配。

在正则表达式中,我可以在组周围放置括号来选择它们并让它们“选择”并脱离模式。spaCy 可以做到这一点吗?

例如,我有这样的文字(来自德古拉):

他们穿着高筒靴,裤子塞在里面,留着长长的黑发和浓密的黑胡须。

我定义了一个实验:

import spacy
from spacy.matcher import Matcher

def test_match(text, patterns):
    nlp = spacy.load('en_core_web_sm')
    matcher = Matcher(nlp.vocab)
    matcher.add('Boots', None, patterns)

    doc = nlp(text)
    matches = matcher(doc)

    for match in matches:
        match_id, start, end = match
        string_id = nlp.vocab.strings[match_id]
        span = doc[start:end]
        print(match, span.text)

text_a = "They wore high boots, with their trousers tucked into them, " \
         "and had long black hair and heavy black moustaches."

patterns = [
    {'POS': 'PRON'},
    {'TAG': 'VBD'},
    {'POS': …
Run Code Online (Sandbox Code Playgroud)

python nlp spacy

2
推荐指数
1
解决办法
813
查看次数

标签 统计

c++ ×2

python ×2

c++11 ×1

camera ×1

cmake ×1

deleted-functions ×1

docker ×1

jenkins ×1

nlp ×1

opencv ×1

ostringstream ×1

spacy ×1