当前位置: 首页 > 知识库问答 >
问题:

我可以在詹金斯以外的工作站cygwin和bash中使用什么时髦的cmd?

沃宇
2023-03-14

我有一个运行在Jenkins上的CD流水线,其中包含一些解密代码,使用bas64gpg2

我设置了管道,以便脚本使用Jenkins shell命令从git获取并解密正确的密码,如下所示:

def plainText = sh(script: """#!/bin/sh -e
        echo "$encrypted" | 
        base64 -d -w 0  | 
        gpg2 --batch --decrypt --passphrase $pw """,
    returnStdout: true
    )
println("$key=$plaintext")

管道工作得很好,现在我正在考虑为我们的开发人员工作站编写一个脚本,使用maven groovy plugin在本地执行相同的解密,以允许开发人员在工作站上运行服务器。

我的第二个要求是我可以在Jenkins上运行maven groovy插件来设置集成测试。

所以我正在寻找一个可以在本地和构建服务器上使用的解决方案。如果有必要,我可以让脚本在操作系统上切换并执行这样的操作:

def cmd = [ 'sh', '-c',
        """echo "$encrypted" | 
           base64 -d -w 0  | 
           gpg2 --batch --decrypt --passphrase $encryptionKey """]
cmd.execute().with {
    def output = new StringWriter()
    def error = new StringWriter()
    //wait for process ended and catch stderr and stdout.
    it.waitForProcessOutput(output, error)
    println "error=$error"
    println "output=$output"
    println "code=${it.exitValue()}"
}

但我不知道如何调整cmd执行cygwin

共有1个答案

孟开宇
2023-03-14

我通过内置的JMX东西打开操作系统,并使用cygwin或linux

import java.lang.management.*

def os = ManagementFactory.operatingSystemMXBean
println """OPERATING SYSTEM: 
    \tarchitecture = $os.arch
    \tname = $os.name
    \tversion = $os.version
    \tprocessors = $os.availableProcessors"""
def bash = os.name.contains("Win") ? "c:\\cygwin64\\bin\\bash" : "bash"
def cmd = [ bash, '-c',
         """echo "$encrypted" | 
            /usr/bin/base64 -d -w 0  | 
            /usr/bin/gpg2 --batch --decrypt --passphrase $encryptionKey """]
cmd.execute()...
 类似资料:
  • 问题内容: 我阅读了Jenkins Wiki的一部分,该部分介绍了设置要由Jenkins实例监视的远程作业。但是,该文档令人困惑,因为它没有告诉我在Jenkins机器或远程机器(完成任务的机器)上要配置什么。 此外,文档还提到了可以直接触发的Java命令以及其他需要servlet容器的命令。我是否必须在远程计算机上安装servlet容器? 也许就在那里,但对我来说,就像是两个文档的混合。您能否说明

  • 我已经为我们的项目设置了jenkins声明管道,而且我正在使用jenkins blue ocean插件 在github中,它显示以下url:http://unconfigured-jenkins-location/job/CRM/job/PR-180/1/display/redirect 如何将网址更改为正确的网址? 我发现这个插件是有责任的https://wiki.jenkins.io/disp

  • 问题内容: 我正在尝试将s从脚本管道转换为声明性管道。我在中有一个这样的块: 我不知道它到底能做什么,以及将其转换为声明性管道语法的正确方法是什么。 问题答案: 分配一个新的工作区。您将使用它来确保其他任何因素都不会干扰磁盘上运行所附步骤的位置。 这不会像步骤那样繁重,因为这还将确保它由单独的执行程序运行。 这将提供比步骤更多的隔离,因为这将无法确保在文件系统上的隔离位置。 您可以按照与脚本相同的

  • 不过,我仍然希望Jenkins担任指挥,这样我们的管道对不在我们团队中的人来说就更明显了。 有很多关于从DevOps触发Jenkins的信息,但我还没有找到任何支持我们需要的东西。这可能吗?你能分享一些例子吗?

  • 我在詹金斯增加了一份新工作,我想定期安排。 在配置作业中,我选中了“定期构建”复选框,并在计划文本字段中添加了以下表达式: 15 13*** 但它不会在预定时间运行。 安排工作是正确的程序吗? 作业应在凌晨4:20运行,但未运行。

  • 安装了插件,这样当我们签入时,执行一个构建,如果成功,则验证中的修改。如果构建失败,那么就不是。我的理解是,这是通过在中设置的工作来实现的。我们现在已经创建了一个新分支(),我想我需要克隆指向另一个分支的现有作业,以便在每次提交时执行相同的工作流和构建。有人能解释一下我是如何克隆这些工作的吗?我似乎看不到一种通过UI来完成的方法,甚至看不到一种通过UI列出作业的方法。