Nightwatch.js
に基づくend2endテストのテストプロジェクトがあります。これはNodeJS
フレームワークです。私はJenkins
の上で実行するend2endテストのためのパイプラインを私のプロジェクトに作成するために 'Jenkinsfile'を使用してDocker container
にしたいと考えています。だから、私はDocker container
を起動し、このDocker container
の中のテストを実行したいと思います。そして、これはJenkinsfile
で実現されるべきです。 Jenkinsfile
を使用せず、手動で作成したジョブで直接shell commands
を使用すると、すべてが完璧です。 Jenkinsfile
を使用している間私はMultipleCompilationErrorsException
パイプラインを実行しているが、私はなぜそれを知りません。JenkinsfileでDockerコマンドを実行中に例外が発生する
pipeline {
agent any
parameters {
text(defaultValue: 'grme/nightwatch-chrome-firefox:0.0.3', description: '', name: 'docker_image')
text(defaultValue: 'npm-test-chrome', description: '', name: 'run_script_method')
text(defaultValue: '/Applications/Docker.app/Contents/Resources/bin/docker', description: '', name: 'docker')
}
stages {
stage('Test') {
steps {
sh 'sudo chmod -R 777 $(pwd)'
echo "------ stop all Docker containers ------"
sh '(sudo ${params.docker} stop $(sudo ${params.docker} ps -a -q) || echo "------ all Docker containers are still stopped ------")'
echo "------ remove all Docker containers ------"
sh '(sudo ${params.docker} rm $(sudo ${params.docker} ps -a -q) || sudo echo "------ all Docker containers are still removed ------")'
echo "------ pull Docker image from Docker Cloud ------"
sh 'sudo ${params.docker} pull "${params.docker_image}"'
echo "------ start Docker container from image ------"
sh 'sudo ${params.docker} run -d -t -i -v $(pwd):/my_tests/ "${params.docker_image}" /bin/bash'
echo "------ execute end2end tests on Docker container ------"
sh 'sudo ${params.docker} exec -i $(sudo ${params.docker} ps --format "{{.Names}}") bash -c "cd /my_tests && xvfb-run --server-args='-screen 0 1600x1200x24' npm run ${params.run_script_method} || true && google-chrome --version && firefox --version"'
echo "------ cleanup all temporary files ------"
sh 'sudo rm -Rf $(pwd)/tmp-*'
sh 'sudo rm -Rf $(pwd)/.com.google*'
sh 'sudo rm -Rf $(pwd)/rust_mozprofile*'
sh 'sudo rm -Rf $(pwd)/.org.chromium*'
echo "------ stop all Docker containers again ------"
sh '(sudo ${params.docker} stop $(sudo ${params.docker} ps -a -q) || sudo echo "------ all Docker containers are still stopped ------")'
echo "------ remove all Docker containers again ------"
sh '(sudo ${params.docker} rm $(sudo ${params.docker} ps -a -q) || sudo echo "------ all Docker containers are still removed ------")'
}
}
}
}
そして、これはパイプラインを実行しているときに私が得る例外です:
これが私のJenkinsfile
ある
Started by user GRme
> git rev-parse --is-inside-work-tree # timeout=10
Setting origin to https://github.com/GRme/e2e-web-tests
> git config remote.origin.url https://github.com/GRme/e2e-web-tests # timeout=10
Fetching origin...
Fetching upstream changes from origin
> git --version # timeout=10
using GIT_ASKPASS to set credentials
> git fetch --tags --progress origin +refs/heads/*:refs/remotes/origin/*
Seen branch in repository origin/master
Seen 1 remote branch
Obtained Jenkinsfile from 0eb7d8c437df1efc56e46171d945e7f2806b838b
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 23: Expected a symbol @ line 23, column 9.
sh 'sudo ${params.docker} exec -i $(sudo ${params.docker} ps --format "{{.Names}}") bash -c "cd /my_tests && xvfb-run --server-args='-screen 0 1600x1200x24' npm run ${params.run_script_method} || true && google-chrome --version && firefox --version"'
^
1 error
at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:129)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:123)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:516)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:479)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:269)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:419)
Finished: FAILURE
私が間違って行うとどのように私はこの例外を解決することができますか?
私はここに単一引用符-server-引数が=「...」内にネストされているという事実を疑いますsh '...' – beny23
はい私はあなたが正しいと思いますが、このようなことをすることが可能でなければなりません。私は何をすべきか? – Martin