天天看點

Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自動化釋出和部署(1)

伺服器版本 Ubuntu 16.04 LTS。

經過上面四篇博文中的相關安裝和配置,我們主要完成了兩個容器的建立和運作:<code>gitlab</code>和<code>gitlab-runner</code>(GitLab 站點和 GitLab CI 服務):

本篇博文目的:使用 GitLab CI 腳本編譯 ASP.NET Core 2.0 程式,然後将編譯後的檔案傳輸到伺服器上,最後使用 SSH 連接配接伺服器,并運作程式,完成釋出和部署。

簡單來說,就是我們每次使用<code>git push</code>送出完代碼,自動完成釋出和部署。

我們再理一下實作上面目的關鍵點:

建立一個 ASP.NET Core 2.0 示例程式

完善并正确的<code>.gitlab-ci.yml</code>檔案配置

GitLab CI 伺服器使用<code>ssh</code>連接配接到測試伺服器(在 Docker 中)

使用<code>scp</code>進行伺服器之間的檔案傳輸

使用<code>supervisor</code>進行站點程式的程序管理

我花了很長時間配置第三步,其實最後解決也很簡單,當然都是馬後炮的結論,下面我們分别來進行操作。

注:伺服器快過期了,大家可以随便搞。

我再搬運下指令(安裝 .NET Core 2.0,并建立 ASP.NET Core 2.0 示例程式):

最後,綁定下 ASP.NET Core 2.0 程式端口:

上面是我最終調試成功後的<code>.gitlab-ci.yml</code>檔案配置,其實整個的建構和釋出流程,從上面的配置中都可以看出。

這裡記錄下一些東西:

配置一開始的<code>image</code>,設定的是我們用于建構的鏡像(也就是說後面所有的腳本執行,都是在基于這個鏡像建立的容器中),如果不設定的話,預設使用的是我們一開始配置 GitLab CI 填寫的 Docker Image,也可以手動編輯<code>vim /srv/gitlab-runner/config/config.toml</code>進行修改,我這裡使用的是<code>microsoft/aspnetcore-build</code>鏡像,隻用于 ASP.NET Core 應用程式的編譯和建構。

<code>stage</code>可以了解為台階,每走一步相當于<code>job</code>,當然,這裡的台階可以走很多步,需要注意的是,每上一個台階或者每走一步,都必須基于上一個台階或上一步執行成功,<code>before_script</code>執行在這些步驟之前,可以了解為準備工作。

<code>environment</code>将執行的<code>job</code>歸納為哪一種執行環境,你可以設定開發環境和正式環境,我們可以通過通過背景進行檢視:

Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自動化釋出和部署(1)

什麼意思呢?就是我們需要在 GitLab CI 建構環境中,使用 SSH 連接配接到測試伺服器,這樣我們才可以做接下來的一些操作。

<code>.gitlab-ci.yml</code>示例配置:

需要強調一點:别在 GitLab CI 容器中進行 SSH 配置,因為 CI 建構腳本執行在另外的容器中,并且這個容器是動态進行建立的,也沒辦法在這個動态容器中進行配置(指的是手動生成 RSA 密鑰)。

是以,我們隻能手動生成 RSA 密鑰,然後強制添加到容器中的 SSH 配置中(通過 RSA 密鑰内容)。

配置步驟:

首先,在任何一台伺服器上,建立 RSA 無密碼的密鑰:

然後複制 RSA 密鑰内容,添加到<code>/Project/Settings/Pipelines</code>的<code>Secret variables</code>配置中(命名為<code>SSH_PRIVATE_KEY_DEV</code>):

Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自動化釋出和部署(1)

這裡需要特别注意,複制内容為(包含開頭和結尾的注釋資訊):

我一開始複制沒有包含注釋資訊,然後就一直報下面的錯誤:

Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自動化釋出和部署(1)

錯誤代碼:

這裡的<code>$SSH_PRIVATE_KEY_DEV</code>,就是上面我們在<code>Secret variables</code>中,添加的 RSA 密鑰内容。

錯誤資訊就是說需要輸入 RSA 密鑰的密碼,但我建立的确實是無密碼的 RSA 密鑰,也就是說這個密鑰是無效的,我被這個問題折磨了好幾天,其他人的記錄:

<a href="https://gitlab.com/gitlab-org/gitlab-ce/issues/14434">"Enter passphrase for /dev/fd/63" error</a>

配置好這一步之後,然後重新測試下,我們就可以看到下面的執行資訊了:

接着我們需要将這個 RSA 密鑰對應的公鑰,上傳到需要連接配接到的伺服器(也就是我們的測試伺服器),指令如下:

到此,GitLab CI 中 SSH 的配置基本上完成了,你可以在<code>.gitlab-ci.yml</code>中添加連接配接腳本,進行測試:

一開始,我們說到使用<code>scp</code>進行伺服器之間的檔案傳輸,因為<code>scp</code>可以基于 SSH 連接配接進行傳輸檔案,是以我們直接進行檔案傳輸了,示例代碼:

這裡貼一下,<code>supervisorctl</code>的常用指令:

指令

說明

supervisorctl stop program_name

停止某個程序

supervisorctl start program_name

啟動某個程序

supervisorctl restart program_name

重新開機某個程序

supervisorctl stop all

停止全部程序

supervisorctl reload

載入最新的配置檔案,停止原有程序并按新的配置啟動、管理所有程序

supervisorctl update

根據最新的配置檔案,啟動新配置或有改動的程序,配置沒有改動的程序不會受影響而重新開機

Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自動化釋出和部署(1)
Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自動化釋出和部署(1)
Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自動化釋出和部署(1)

寫在最後:

GitLab CI &amp; ASP.NET Core 2.0 釋出和部署(完成):使用 CI 腳本編譯程式,然後将編譯後的檔案傳輸到伺服器上,最後運作程式,完成釋出和部署。

GitLab CI &amp; ASP.NET Core 2.0 &amp; Docker 釋出和部署(下篇):項目中添加<code>Dockerfile</code>檔案,使用 CI 腳本建構自定義鏡像,然後在伺服器上拉取并建立相應容器,最後啟動容器,完成釋出和部署。

本文轉自田園裡的蟋蟀部落格園部落格,原文連結:http://www.cnblogs.com/xishuai/p/ubuntu-gitlab-ci-docker-aspnet-core-part-1.html,如需轉載請自行聯系原作者