Como posso fazer com que Jenkins execute um script que ele retirou do Git?


12

Estou usando o Jenkins para acionar e gerenciar uma série de trabalhos de importação. Quero colocar meu script de importação no Github e, quando o Jenkins criar o trabalho, ele deverá (a) extrair o script controlado por versão do Github e (b) executar o script.

O problema que estou enfrentando é que não sei como referenciar o nome do script para executar no trabalho. Estou assumindo que o código fonte é puxado para o diretório do espaço de trabalho. Essa suposição está correta? (Se ao menos houvesse documentação!)

Aqui está o que eu fiz até agora:

  1. Instalei o Jenkins (obviamente) no meu Windows Server (não, não tive escolha)
  2. Criei um repositório na minha conta do github e coloquei meu código nele
    • É público em https://github.com/mcholl/SARS-Import/
    • Você verá que tenho dois scripts, roottest.py e omniture-video \ test.py. O código que está sob patente da Apple, tenho certeza :)
    • A ideia é que eu gostaria de rodar o roottest.py
  3. Instalou o plug-in Github
  4. Criou um trabalho da seguinte maneira:
  5. Executar manualmente o trabalho

O que recebo, no entanto, é uma mensagem de erro informando que o arquivo não pode ser localizado. Isso é estranho, porque eu assumo que o fluxo de trabalho seria "puxe uma cópia local da fonte para o diretório ... (Trabalho) / espaço de trabalho /, depois execute o comando em lote no contexto do diretório do espaço de trabalho.

Aqui está a saída completa do console:

Iniciado pelo usuário anônimo Criando na área de trabalho C: \ Arquivos de Programas (x86) \ Jenkins \ jobs \ Testing Github Integration \ workspace [área de trabalho] $ cmd / c, chame C: \ Windows \ TEMP \ hudson1966342425043540895.bat

C: \ Arquivos de programas (x86) \ Jenkins \ jobs \ Testando a integração do Github \ espaço de trabalho> python roottest.py python: não é possível abrir o arquivo 'roottest.py': [Erro 2] Nenhum arquivo ou diretório existe

C: \ Arquivos de programas (x86) \ Jenkins \ jobs \ Testando a integração do Github \ espaço de trabalho> saída 2 Etapa de compilação 'Executar comando em lote do Windows' marcou a compilação como falha Concluído: FAILURE

Obviamente, eu esperava apenas ver os resultados da minha declaração impressa no console.

O que eu errei? E por que meu script já não está lá?


Vamos ver o código em C: \ Windows \ TEMP \ hudson1966342425043540895.bat você está usando o git pull?

Jenkins cria automaticamente e o exclui. Você pode ver todo o conteúdo na saída do console, no entanto - é o comando "python roottest.py" I acima referenciado
Afável Geek

roottest.py não está no seu caminho. Você vê o arquivo no diretório do espaço de trabalho ou também é excluído automaticamente? Quando você executa o git pull, você precisa estar na cópia local do repositório clonado, creio que deve puxar novas alterações para o repositório local. É difícil ajudá-lo quando não consigo ver nenhum dos comandos reais sendo executados.

Você seguiu estas instruções para o plugin github wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin- ? Você definiu a variável de ambiente GIT_HOME etc?

D'oh! Mais uma razão para odiar janelas. Obrigado - Eu acho que pode ser o problema
Afável Geek

Respostas:


5

Para minha compilação (em um host Linux), faço algo assim (como uma etapa de compilação no Jenkins) para executar um script de compilação no espaço de trabalho com check-out recente:

Executar comando shell:

 sh -x $WORKSPACE/build/myproject.build

Presumo que funcionaria de maneira semelhante no Windows, exceto, é claro, que você usaria \ em vez de / e você está usando python em vez de sh para executar seu script.


2

Você pode escrever duas linhas em sua compilação:

chmod 777 ./my_script.sh
./my_script.sh

1
Permissões de gravação no mundo podem não ser a melhor ideia! Por que não 755 (proprietário de escrita, todos os outros leitura / executar.
kmarsh

De fato, 777 não é a melhor idéia, mas essa resposta realmente me ajudou.
Robin Dijkhof 8/08/19

0

Você pode armazenar algum script no Git, por exemplo, test.sh:

#!/bin/bash
_test_func(){ 
 echo 'test'
}

Em seguida, na entrada "Executar shell", coloque a importação desse script e chame "_test_func":

source test.sh
_test_func

Resultado:

 + source test.sh
 + _test_func
 test
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.