小编Cru*_*mmy的帖子

Jenkins:无法在管道阶段定义变量

我正在尝试创建一个声明性的Jenkins管道脚本,但是遇到了简单变量声明的问题.

这是我的脚本:

pipeline {
   agent none
   stages {
       stage("first") {
           def foo = "foo" // fails with "WorkflowScript: 5: Expected a step @ line 5, column 13."
           sh "echo ${foo}"
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 5: Expected a step @ line 5, column 13.
           def foo = "foo"
           ^
Run Code Online (Sandbox Code Playgroud)

我在Jenkins 2.7.4和Pipeline 2.4上.

groovy jenkins jenkins-pipeline

89
推荐指数
4
解决办法
16万
查看次数

使用关联数组作为D3的数据

我有一个非常简单的D3示例,首先将数据读入关联数组,然后将其显示在条形图中.

我似乎无法使用此方法显示任何内容.相反,我必须在两者之间插入一个任务:将数据读入关联数组,将数据复制到一个简单数组中,然后使用简单数组显示条形图.

chart.selectAll("div")
     .data(genreAssociative)
     .enter().append("div")
     .style("width", function(d) { return d * 10 + "px"; })
     .text(function(d) { return d; });
Run Code Online (Sandbox Code Playgroud)

以上不起作用.

genreSimple = [];
for (var genre in genreAssociative) genreSimple.push(genreAssociative[genre]);         
chart.selectAll("div")
     .data(genreSimple)
     .enter().append("div")
     .style("width", function(d) { return d * 10 + "px"; })
     .text(function(d) { return d; });
Run Code Online (Sandbox Code Playgroud)

以上呢; 使用简单的数组作为中介.是否有一种特殊的方法来迭代关联数组而不是标准数组?

javascript associative-array d3.js

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

GSON 无法使用 Java 17 序列化异常

以下代码适用于 Java 11:

new Gson().toJson(new Exception())
Run Code Online (Sandbox Code Playgroud)

在 JDK 17 上,我收到以下错误:

Unable to make field private java.lang.String java.lang.Throwable.detailMessage accessible: module java.base does not "opens java.lang" to unnamed module @147ed70f
Run Code Online (Sandbox Code Playgroud)

通过阅读此页,我认为我可以解决它--add-opens java.base/java.lang=ALL-UNNAMED。然而还有更好的方法吗?也许使用自定义的反/序列化器?

java gson

8
推荐指数
1
解决办法
1万
查看次数

Docker-compose,远程上下文,相对于本地机器而不是远程的路径

我有一个非常简单的 docker-compose.yml:

version: '2.4'

services:
  containername:
    image: ${DOCKER_IMAGE}
    volumes:
      - ./config:/root/config
Run Code Online (Sandbox Code Playgroud)

我正在使用通过 ssh 访问的远程登台服务器:

docker context create staging --docker "host=ssh://ubuntu@staging.example.com"
docker context use staging
Run Code Online (Sandbox Code Playgroud)

但是,在我执行docker-compose up以下操作后,我的音量出现了意外结果:

docker-compose --context staging up -d
docker inspect containername
...
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/Users/crummy/code/.../config",
                "Destination": "/root/config",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
...
Run Code Online (Sandbox Code Playgroud)

似乎扩展./config到完整路径发生在 docker-compose 运行的机器上。不是运行 Docker 的机器。

我可以通过硬编码的整个路径解决这个问题:/home/ubuntu/config:/root/config。但这使我的 docker-compose 文件变得不那么灵活。有没有办法让点扩展发生在远程机器上?

yaml docker docker-compose

7
推荐指数
1
解决办法
545
查看次数

Jenkins 管道和信号量

我正在构建一个 Jenkins 作业,它将连续运行我所有的暂存测试,但不是一次全部运行(它们依赖于共享硬件)。因此,我正在创建并行作业,并使用信号量确保一次仅运行有限数量的作业。这是重现该问题的管道的简化版本:

import java.util.concurrent.Semaphore

def run(job) {
  return {
    this.limiter.acquire();
    try {
      println "running ${job}"
      build job
      println "finished ${job}"
    } finally {
      this.limiter.release();
    }
  }
}

def getJobs() {
  def allJobs = Jenkins.getInstance().getJobNames()
  def stagingJobs = []
  for(String job : allJobs) {
    if (job.startsWith("staging/temp")) {
      stagingJobs.add(job)
    }
  }
  println "${stagingJobs.size()} jobs were found."
  return stagingJobs
}

this.limiter = new Semaphore(2)
def jobs = [:]
for (job in getJobs()) {
  jobs[job] = run(job)
}
parallel jobs
Run Code Online (Sandbox Code Playgroud)

当我在没有信号量的情况下运行时,一切正常。但是使用上面的代码,除了:

[Pipeline] echo …
Run Code Online (Sandbox Code Playgroud)

semaphore jenkins jenkins-pipeline

6
推荐指数
1
解决办法
3892
查看次数

覆盖Micronaut测试中的依赖项

我正在测试一个注入了bean的Micronaut类.在我的测试中,我提供了一个@MockBean类来覆盖它.然而,似乎Micronaut仍然注入了真正的依赖.

@MicronautTest
public class ClassUnderTestTest {

    @Inject ClassUnderTest classUnderTest;

    @Test
    public void test() {

    }

    @MockBean
    Dependency dependency() {
        return mock(Dependency.class);
    }

}
Run Code Online (Sandbox Code Playgroud)

我上传了一个最小的repro到Github:https://github.com/crummy/micronaut-test-dependencies.真正的依赖项会引发异常,测试也会发生异常.我不会因为我的原因而预料到会发生这种情况@MockBean.

如果我更改注释,@MockBean(Dependency.class)那么我会收到此错误:Message: No bean of type [di.failure.example.Dependency] exists.这似乎让我更加困惑 - 现在它无法解决我的真实或我的模拟依赖?

java dependency-injection micronaut

5
推荐指数
1
解决办法
1932
查看次数

调用win32 API并给类函数提供回调

我正在尝试通过将一些现有的win32 UI代码放入类中来清理它.以前我有一个像这样的AppDlgProc函数:

BOOL CALLBACK AppDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { ... }
Run Code Online (Sandbox Code Playgroud)

我这样使用的是:

DialogBoxParam(hInstance, (LPCTSTR)IDD_SETTINGS, 0, AppDlgProc, 0);
Run Code Online (Sandbox Code Playgroud)

现在我将所有这些放在一个SettingsWindow对象中,然后调用settingsWindow-> show()来启动它:

void SettingsWindow::show(HINSTANCE hInstance) {
     DialogBoxParam(hInstance, (LPCTSTR)IDD_SETTINGS, 0, &SettingsWindow::AppDlgProc, 0);
}
Run Code Online (Sandbox Code Playgroud)

我很确定我在这里错误地给出了回调方法.Visual Studio告诉我"Intellisense:类型的参数......与DLGPROC类型的参数不兼容".谷歌搜索似乎告诉我似乎告诉我,我需要另一个论点 - 没有别的办法吗?

作为参考,我的AppDlgProc函数现在看起来像这样:

BOOL CALLBACK SettingsWindow::AppDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {  ... }
Run Code Online (Sandbox Code Playgroud)

c++ winapi

4
推荐指数
1
解决办法
1856
查看次数

使用GetLastError()== 6重复调用CreateCompatibleBitmap()最终失败

我有一个程序,每秒拍摄一次屏幕截图并计算屏幕的平均颜色.但是,经过约45分钟的跑步,我的支票 if ((OffscrBmp = CreateCompatibleBitmap(bitmapDC, nScreenWith, nScreenHeight)) == NULL)

开始回来了true.一个GetLastError()回复的电话6,虽然我似乎无法找到任何关于这意味着什么的文件.

为什么数千次调用此函数的工作正常,然后突然每次调用失败?

这是我的整个功能:

COLORREF ScreenColourCapture::getScreenColour() {
    // Most of this is adapted from http://www.cplusplus.com/forum/beginner/25138/
    LPBITMAPINFO lpbi = NULL;
    HBITMAP OffscrBmp = NULL;
    HDC OffscrDC = NULL;
    int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
    int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
    HDC bitmapDC = CreateCompatibleDC(0);
    HBITMAP hBmp = CreateCompatibleBitmap(GetDC(0), nScreenWidth, nScreenHeight);
    SelectObject(bitmapDC, hBmp);
    BitBlt(bitmapDC, 0, 0, nScreenWidth, nScreenHeight, GetDC(0), 0, 0, SRCCOPY);
    if ((OffscrBmp = CreateCompatibleBitmap(bitmapDC, nScreenWidth, nScreenHeight)) == NULL) {
        int …
Run Code Online (Sandbox Code Playgroud)

c++ winapi

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

在Python中检测计算机/程序关闭?

我有一个循环运行的Python脚本,定期调整我的照明系统.当我关闭计算机时,我希望我的脚本检测到它,并完全关闭灯.

如何检测我的计算机开始在Python中关闭?

或者,假设Windows向Python发送"关闭时间"的通知,我如何拦截它以杀死我的灯并退出循环?

python windows

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

为什么我的tornadoFX ObservableList无法接收更新?

我有一个简单的tornadoFX程序,该程序会在屏幕上的随机位置生成一些圆圈。但是,没有一个圆圈被绘制。我添加了一些调试代码以在绘制圆时打印一条线,并且只打印一次。

我希望圆圈以100ms的间隔出现,以及当我单击“添加演员”按钮时出现。

private const val WINDOW_HEIGHT = 600
private const val WINDOW_WIDTH = 1024

fun main(args: Array<String>) {
    Application.launch(MainApp::class.java, *args)
}

class MainApp : App(WorldView::class, Stylesheet::class)

data class Actor(val x: Double, val y: Double)

class WorldView: View("Actor Simulator") {
    override val root = VBox()
    private val actors = ArrayList<Actor>(0)

    init {
        tornadofx.runAsync {
            (0..100).forEach {
                val x = ThreadLocalRandom.current().nextDouble(0.0, WINDOW_WIDTH.toDouble())
                val y = ThreadLocalRandom.current().nextDouble(0.0, WINDOW_HEIGHT.toDouble())
                actors.add(Actor(x, y))
                Thread.sleep(100)
            }
        }
    }

    init {
        with(root) {
            stackpane {
                group {
                    bindChildren(actors.observable()) …
Run Code Online (Sandbox Code Playgroud)

kotlin tornadofx

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