2

因此,經過多年使用CruiseControl.NET進行持續集成任務,Iv'e終於決定咬緊牙關,屈服於JavaCI的世界,即詹金斯。讓詹金斯CI控制主管D

如果我已經構建了我的構建系統,並且它的主要工作是接受最後一步,我的部署步驟,似乎我無法完成我想要的任務。

我試圖建立

一個DOTNET核心網絡應用程序,包括使用微軟的MVC技術的一個C#後端和前端使用奧裏利亞Web應用框架編寫的打字稿。

構建和部署該應用程序手動是

  • DOTNET恢復
  • NPM安裝的步驟
  • DOTNET建立
  • DOTNET發佈
  • 服務監督員停止(必須以root身份運行)
  • rm -R/web/app/*(必須作爲www-data或root運行)
  • CP -R/buildoutput /網絡/應用(必須運行作爲WWW的數據或根)
  • 服務管理者開始(必須作爲root運行)

構建系統是在64位運行Ubuntu 16.04實例,並且jenkins被設置爲每5分鐘輪詢一次持有源代碼的Git Repositiory以檢查更改。

什麼Iv'e走到這一步,

每一件事上升到「服務監督員停止」項,完美的作品。無論我嘗試什麼,我都找不到一個理智的方式來執行根步驟。

這是我在詹金斯工作至今:

Current Jenkins Project

的「DeployFromJenkins.sh」 shell腳本,沒有什麼神奇的,它只是有以下表現在:(實際的服務器路徑具有被刪)

#!/bin/bash 
/usr/sbin/service supervisor stop 
rm -r /WEBAPPFOLDER/* 
cp -R "/JENKINSBUILD/." /WEBAPPFOLDER/ 
/usr/sbin/service supervisor start 

這個版本失敗,因爲該詹金斯運行作爲詹金斯,從而試圖運行部署腳本詹金斯,這意味着沒有停止/啓動服務的事實。

Iv'e試過其他方式也一樣,小的web應用程序以root身份運行的例子,但我無法弄清楚如何使詹金斯發送/接收URL請求,用信號文件,但我無法弄清楚如何讓jenkins讀取/寫入信號量文件。

作爲新的使用詹金斯,我會拿一個流行在寫一個插件,但我沒有時間了,我還不知道詹金斯不夠好正確地使用它,不去管學習它的API 。

所以,現在我的問題...

什麼是最好的什麼來實現我需要實現的,我知道我的Linux和Windows系統的方式很好,所以不要擔心提出瘋狂的想法。

我認爲我實際需要做的是解決部署步驟,其餘部分工作得非常好,在這種情況下,人們可以對部署步驟做出更好的建議,是否有更好的插件可能不會知道關於?

PS:我也不是一個真正的主管專家,我明白它可以做得比我目前使用它更多,只是爲了啓動/停止和監視作業。

在此先感謝.....

+0

您是否在'DeployFromJenkins.sh'腳本中嘗試過使用'su -c'或'sudo'? – omajid

+0

有趣的是,我從來沒有想到,今天早上偶然發現一個帖子,讓我跑步。所以當我看到這個評論時,我正要來這裏回答我自己的問題:-) – shawty

回答

1

,以便始終似乎發生,8小時後,我已經成功地回答我的問題。

該解決方案非常簡單。

須藤

基本上,你需要使用你的發行版工具以下行添加到您的sudoers文件:

jenkins ALL = NOPASSWD: /path/to/yourscript.sh 

在此通過使用visudo命令無論是作爲做的ubuntu sudo或來自root帳戶。

我在標記爲User privilege specification的部分的「root」條目下添加了我的行。

這一行基本上說的是,如果命名腳本是由前面的sudo用戶jenkins運行的,它將以完全權限運行並且不需要密碼。

一旦sudo的條目在你的發行版的配置添加,那麼您只需要做的是設置後生成步驟如下:

Updated post build step using sudo

使用這種技術,現在我可以做很多的自動化只使用各種shell腳本。