[Jenkins] Alguém sabe fazer deploy no Heroku com o Jenkins?

Bom estou lendo o Livro sobre o Jenkins, mas estou com uma dúvida gostaria de saber como configurar o Jenkins para fazer o Deploy para o Heroku ?
Alguém que sabe me explicar como eu posso configurar o Jenkins para realizar o deploy continuo?

Olá Cesar,

O Heroku faz deploy através do git, então instale o plugin do Git para isso, nesse blog tem um exemplo:

http://thediscoblog.com/blog/2014/01/24/continuous-delivery-for-heroku-with-jenkins/

Continue lendo o livro e observe o exemplo do pipeline que é construído no decorrer dos capítulos, ele é um exemplo de integração contínua, com deploy em vários ambientes e atualização do banco de dados.

Olá Fernando @boaglio,

Bom gostei bastante do livro e vi as partes em que você faz o uso do Flyway com o jenkins, os deploy para um tomcat externo entre outras coisas.

Mas o grande problema do deploy para o Heroku é que não estou conseguindo fazer a autenticação, bom vou deixar o stacktrace:

"C:\Users\Cesar\AppData\Local\GitHub\PortableGit_d76a6a98c9315931ec4927243517bc09e9b731a0\cmd\git.exe -c core.askpass=true fetch --tags --progress https://git.heroku.com/mydemoisfirst.git +refs/heads/*:refs/remotes/heroku/*" returned status code 128:
stdout: 
stderr: github --credentials get: github: command not found
github --credentials erase: github: command not found
remote: !	WARNING:
remote: !	Do not authenticate with username and password using git.
remote: !	Run `heroku login` to update your credentials, then retry the git command.
remote: !	See documentation for details: https://devcenter.heroku.com/articles/http-git#authentication
fatal: Authentication failed for 'https://git.heroku.com/bla.git/'

	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1723)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1459)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:63)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:314)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$2.execute(CliGitAPIImpl.java:506)
	at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1046)
	at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1086)
	at hudson.scm.SCM.checkout(SCM.java:495)
	at hudson.model.AbstractProject.checkout(AbstractProject.java:1278)
	at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:604)
	at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:529)
	at hudson.model.Run.execute(Run.java:1720)
	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
	at hudson.model.ResourceController.execute(ResourceController.java:98)
	at hudson.model.Executor.run(Executor.java:404)
ERROR: null

Estou fazendo uma referência ao git.exe do aplicativo do github que possuo na maquina pois não consegui utilizar a instalação automática do jenkins.

Você precisa usar o https://toolbelt.heroku.com/ para interagir com o Heroku.

Bom então eu já tinha instalado o toolbelt, mas assim mesmo assim ele persiste com o mesmo erro. Mas eu troquei o git.exe para o do próprio do toolbelt que é o mesmo o git-scm e o erro mudou o problema foi a espera :timer:

ERROR: Timeout after 10 minutes
 > C:\Program Files\Git\bin\git.exe config --local --remove-section credential # timeout=10
ERROR: Error fetching remote repo 'heroku'
hudson.plugins.git.GitException: Failed to fetch from https://git.heroku.com/bla.git
	at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:799)
	at hudson.plugins.git.GitSCM.retrieveChanges(GitSCM.java:1055)
	at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1086)
	at hudson.scm.SCM.checkout(SCM.java:495)
	at hudson.model.AbstractProject.checkout(AbstractProject.java:1278)
	at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:604)
	at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:86)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:529)
	at hudson.model.Run.execute(Run.java:1720)
	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
	at hudson.model.ResourceController.execute(ResourceController.java:98)
	at hudson.model.Executor.run(Executor.java:404)
Caused by: hudson.plugins.git.GitException: Command "C:\Program Files\Git\bin\git.exe -c core.askpass=true fetch --tags --progress https://git.heroku.com/bla.git +refs/heads/*:refs/remotes/heroku/*" returned status code -1:
stdout: 
stderr: 
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1723)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1459)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$300(CliGitAPIImpl.java:63)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:314)
	at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:797)
	... 11 more
ERROR: null
Build did not succeed and the project is configured to only push after a successful build, so no pushing will occur.
Finished: FAILURE

Já tentei trocar as credenciais e troquei vários tipos de ssh do próprio jenkins que estão configurado direto no heroku e nada .

sua rede tem proxy ? Precisa configurar o Git também:

Bom minha rede não estou usando proxy.
Bom usando o toolbelt consigo clonar o projeto, dar pull e push no git do heroku via script numa boa, mas da maneira que você me passou com o Jenkins ainda não consegui .

Olá Cesar, tudo bem?

No caso você configuro o plugin do git com uma chave ssh e coloco essa chave ssh no repositório?

Olá @paulopatto3,

Bom na verdade sim eu coloquei chave até porque eu não conseguiria nem comitar ele no Heroku sem ela, coloquei o padrão que é gerado pelo github.ssh e o id_pub.ssh que eu gero manualmente. Já como expliquei acima já tentei de várias maneiras colocar informando na config do Jenkins mas nenhum surgiu efeito, e criei varias credentials para testar mas nada de funcionar.

Bom se alguém tiver algum tutorial de passo à passo de como posso fazer. Diferente do acima.

Ficaria agradecido.