2016-11-01 2 views
3

TL; DRЯ хочу использовать шаг sh, хотя Jenkins работает в Windows. Я не хочу использовать bat шаг, если вы не можете показать мне, как легко воспроизвести то, что мне нужно сделать, используя batИспользование шага sh в Windows

Я преобразования некоторых старых рабочих мест Jenkins к 2.x сценария трубопроводов. Одна из моих работ использует «Опубликовать через SSH плагин» к:

  • Отправить артефакты на удаленный сервер
  • Exec набор команд на удаленном сервере

Например:

Publish over SSH plugin

Я хотел повторить это в трубопроводном Script, так что я сделал следующее:

stage('Deploy') { 
    withCredentials([[$class: 'FileBinding', credentialsId: 'bitbucket-key-file', variable: 'SSHKEY']]) { 
     sh ''' 
      scp -i "$SSHKEY" dsub.tar.gz [email protected]:dsubdeploy 
      scp -i "$SSHKEY" deployDsubUi.sh [email protected]:dsubdeploy 
      ssh -i "$SSHKEY" -o StrictHostKeyChecking=no 192.168.220.57 <<- EOF 
       DEPLOY_DIR=/home/tprmbbuild/dsubdeploy 
       echo '*** dos2unix using sed' 
       sed -e 's/\r$//' $DEPLOY_DIR/deployDsubUi.sh > $DEPLOY_DIR/deployDsubUi-new.sh 
       mv $DEPLOY_DIR/deployDsubUi-new.sh $DEPLOY_DIR/deployDsubUi.sh 
       chmod 755 $DEPLOY_DIR/deployDsubUi.sh 
       echo '*** Deploying Dsub UI' 
       $DEPLOY_DIR/deployDsubUi.sh $DEPLOY_DIR/dsub.tar.gz 
      EOF''' 
    } 
    } 

Проблема, я получаю эту трассировку стека при выполнении моей сборки:

[Pipeline] sh 
[E:\Jenkins\jenkins_home\workspace\[email protected]] Running shell script 
     1 [main] sh 3588 E:\Jenkins\tools\Git_2.10.1\usr\bin\sh.exe: *** fatal error - add_item ("\??\E:\Jenkins\tools\Git_2.10.1", "/", ...) failed, errno 1 
Stack trace: 
Frame  Function Args 
000FFFF9BB0 0018005C24E (0018023F612, 0018021CC39, 000FFFF9BB0, 000FFFF8B30) 
000FFFF9BB0 001800464B9 (000FFFFABEE, 000FFFF9BB0, 1D2345683BEC046, 00000000000) 
000FFFF9BB0 001800464F2 (000FFFF9BB0, 00000000001, 000FFFF9BB0, 4A5C3A455C3F3F5C) 
000FFFF9BB0 001800CAA8B (00000000000, 000FFFFCE00, 001800BA558, 1D234568CAFA549) 
000FFFFCC00 00180118745 (00000000000, 00000000000, 001800B2C5E, 00000000000) 
000FFFFCCC0 00180046AE5 (00000000000, 00000000000, 00000000000, 00000000000) 
00000000000 00180045753 (00000000000, 00000000000, 00000000000, 00000000000) 
000FFFFFFF0 00180045804 (00000000000, 00000000000, 00000000000, 00000000000) 
End of stack trace 
+0

Это вам подходит? http://www.tikalk.com/devops/shell-jenkins-windows-slave/ –

+0

На выходе не отображается '*** *** dos2unix с помощью sed ''. Возможно, это не сработало в 'scp', иначе может возникнуть ошибка при запуске оболочки. Если вы можете добавить команду 'echo' после каждого scp, это может дать вам подсказку.Также вы можете попытаться запустить пустой сценарий оболочки (только с 'echo'), чтобы сузить проблему. – blackpen

+0

@blackpen на самом деле это мое убеждение, что он не запускает оболочку, поэтому ни одна из команд не имеет шансов на запуск – ThaDon

ответ

1

Вы можете запустить scp.exe из установки git непосредственно в пакетном скрипте. Нет документа «здесь» для партии, насколько я знаю, но вы можете просто запустить сценарий на сервере в отдельный файл.

(непроверенная)

stage('Deploy') { 
withCredentials([[$class: 'FileBinding', credentialsId: 'bitbucket-key-file', variable: 'SSHKEY']]) { 
    bat ''' 
     E:\\Jenkins\\tools\\Git_2.10.1\\usr\\bin\\scp.exe -i "${SSHKEY}" dsub.tar.gz [email protected]:dsubdeploy 
     E:\\Jenkins\\tools\\Git_2.10.1\\usr\\bin\\scp.exe -i "${SSHKEY}" deployDsubUi.sh [email protected]:dsubdeploy 
     E:\\Jenkins\\tools\\Git_2.10.1\\usr\\bin\\scp.exe -i "${SSHKEY}" -o StrictHostKeyChecking=no 192.168.220.57 < server_script.sh 
} 

}

+1

Я разочарован тем, что что-то, что я мог бы легко сделать с плагинами v1.6, настолько сложно или даже невозможно сделать с сценарием сценария 2.x – ThaDon

3

Согласовано «это мое убеждение, что не в состоянии породить оболочку». Он пытается запустить «E: \ Jenkins \ tools \ Git_2.10.1 \ usr \ bin \ sh.exe» (используя синтаксис обратной косой черты Windows). Если у нас не установлен исполняемый файл оболочки (sh.exe) в указанном каталоге, он не сработает.

Powershell (или Cmd Shell):
Если вы oepn использовать командные файлы, вы должны установить/настроить 3 двоичных файлов (SSH, УПП, SSH). Все остальное встает на свои места (я вижу, что вы передаете команды удаленной машине с использованием ssh. Я предполагаю, что удаленный сервер основан на Linux/Unix).

Альтернативы:
Вы можете использовать Cygwin или запустить Linux на VirtualBox (или любое программное обеспечение, которое эмулирует Linux на окнах). Но запуск только трех команд может не стоить проблем (это определенно будет плодотворным, если у вас есть планы конвертировать/писать больше сценариев оболочки в будущем).

+0

@ThaDon, Спасибо, что наградил награду. вам нужны разъяснения, я был бы рад помочь вам. – blackpen

1

Вы можете использовать "летучая мышь" вместо "ш" в окнах. Также используйте 2 обратную косую черту, чтобы избежать правильной строки пути. См. Пример ниже

node { 
     currentBuild.result = "SUCCESS" 
     try { 

     stage('Checkout'){ 

      checkout scm 
     } 

     stage('Convert to Binary RPD'){ 
     bat "D:\\oracle\\Middleware\\user_projects\\domains\\bi\\bitools\\bin\\biserverxmlexec -D .\\RPD -P Gl081Reporting -O .\\GLOBI.rpd" 
     } 


     stage('Notify'){ 

     echo 'sending email' 

     // send to email 
      emailext ( 
       subject: "SUCCESS: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'", 
       body: """$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS: 
        Check console output at $BUILD_URL to view the results.""", 
       to:"[email protected] [email protected]" 
      ) 
     } 

    } 
    catch (err) { 

     currentBuild.result = "FAILURE" 

     throw err 
    } 

} 
Смежные вопросы