2017-08-23 12 views
0

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 

私が間違って行うとどのように私はこの例外を解決することができますか?

+1

私はここに単一引用符-server-引数が=「...」内にネストされているという事実を疑いますsh '...' – beny23

+0

はい私はあなたが正しいと思いますが、このようなことをすることが可能でなければなりません。私は何をすべきか? – Martin

答えて

1

ラインで'を脱出した後、パイプラインはもう何も構文エラーがありません:)

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"' 
関連する問題