我对使用 groovy 很陌生。尤其是当涉及到 Jenkins+Groovy+Pipelines 时。
我有一个可以不时更改的字符串变量,并希望应用正则表达式来适应字符串可能返回的 2 或 3 个可能的结果。
在我的常规代码中,我有:
r = "Some text that will always end in either running, stopped, starting."
def regex = ~/(.*)running(.*)/
assert regex.matches(r)
但是我在 jenkins 输出中收到一个错误:
hudson.remoting.ProxyException:groovy.lang.MissingMethodException:没有方法签名:java.util.regex.Pattern.matches() 适用于参数类型:(java.lang.String)
更新:我能够在我正在创建的管道作业中创建一个非常漂亮的 jenking groovy while 循环,以等待远程进程使用此处的正则表达式信息和不同帖子中的提示(在 Groovy 中使用 inputStream 执行 .. while() ?)。
while({
def r = sh returnStdout: true, script: 'ssh "Insert your remote ssh command that returns text'
println "Process still running. Waiting on Stop"
println "Status returned: $r"
r =~ /running|starting|partial/ …
Run Code Online (Sandbox Code Playgroud) 我们需要创建一个也安装了 db2 客户端的 docker 容器。该容器还将有一些使用 db2 客户端的 shell 脚本。
我们获取一个基本的 Cent OS 映像,然后通过 RUN 命令添加 db2:
COPY db2rtcl_nr.rsp /db2install/
RUN cd /db2install && curl -o ibm_data_server_runtime_client_linuxx64_v11.1.tar.gz http://public_file_server.com/downloads/appTools/installs/db2/ibm_data_server_runtime_client_linuxx64_v11.1.tar.gz && \
tar -xvf ibm_data_server_runtime_client_linuxx64_v11.1.tar.gz && \
rm -f ibm_data_server_runtime_client_linuxx64_v11.1.tar.gz && \
rtcl/db2setup -u db2rtcl_nr.rsp -f sysreq && \
chown -R 1000:1000 /opt/ibm/db2/V11.1
ENV PATH="$PATH:/opt/ibm/db2/V11.1/bin"
Run Code Online (Sandbox Code Playgroud)
图像构建正常,没有错误。
但是,当我尝试通过交互式 shell 命令运行并连接到容器时:
docker run -it --entrypoint=/bin/bash db2Container
Run Code Online (Sandbox Code Playgroud)
并尝试使用以下命令调用 db2 CLI
db2
Run Code Online (Sandbox Code Playgroud)
我收到错误:
DB21018E 发生系统错误。命令行处理器无法继续处理。
令人困惑的是,如果我立即运行bash
shell,然后调用db2
CLI,它就会起作用:
bash
db2
(c) Copyright IBM Corporation 1993,2007 …
Run Code Online (Sandbox Code Playgroud)