嗯,持續集成,繼上一篇咱們繼續本篇的持續集成.咱們就直奔主題了,不扯淡不漫無邊際的扯一堆理論,由於說得再多也不如一練.linux
先說明哈,如下操做都是在windows中:git
a).須要下載安裝 jenkins 的windows版本github
b).須要下載安裝 docker for windows,安裝以後使用的 linux容器,若是不知道的,能夠看上一篇sql
c).咱們這裏的演示使用的github,因此須要一個git的帳號,同時須要受權docker
呵呵,你可能會問爲啥都是windows,由於我是windows系統,可是linux操做是同樣的,看問後面的內容你就知道了.另外,jenkins的 docker的版本也有的,可是操做起來很吃力的,依舊的作了隨筆沒有發佈出來,記錄了不少錯誤.shell
jenkins獲取地址:https://jenkins.io/download/ 當前版本是2.138,安裝不說了,安裝以後能夠ctrl+r駛入services.msc查看jenkins的服務是否啓動,肯定起來以後,咱們在瀏覽器地址欄輸入 http://localhost:8080訪問jenkins的初始頁面:數據庫
選擇第一個安裝就行,安裝完成以後須要咱們解鎖jenkins:windows
固然這是linux下的界面,windows的界面在這個紅字部分會把盤符也顯示的,直接打開就行了,若是是docker的容器的話,須要先進入這個jenkins的容器,好比:咱們就獲取一下,先看下容器ID:api
docker container ls --all瀏覽器
獲取密碼:
docker exec -it 容器ID /bin/bash
而後輸入
cat 頁面上提供的文件路徑
就能夠看到一個字符產串串了,複製貼進去就好,進入以後會讓你設置一個帳號密碼,那麼就設置就好了
設置完成以後進入到了jenkins的主頁:
咱們繼續進入: 系統管理 -->系統設置,劃到下方的 github的配置:
在上面輸入名稱
這裏注意下,點擊憑據 的右邊的問好,這裏顯示的 personal access token 跳轉到 git的受權設置頁面,按照下面的三個權限提示,勾上便可.而後下一步驟:
點擊憑據 Add:
輸入github的帳號密碼,ID和描述 隨便填,點擊添加,關閉彈窗
而後點擊 鏈接測試 顯示:Credentials verified for user 你的github名稱,即表示驗證成功了.
如下內容比較簡單,因此下面就看圖操做
這由於我是windows的系統,使用的docker for windows,(雖然是linux容器),因此這裏構建中選擇的不是shell命令,而是windows的批處理命令:這是構建中的內容:
echo '還原nuget包引用' dotnet restore echo '編譯項目' dotnet build ESoftor.sln -c Release echo '發佈發佈項目 到指定目錄,這我指定了咱們dockerfile中設置的工做目錄' dotnet publish ESoftor.WebApi/ESoftor.WebApi.csproj -o /esoftor-api-master echo '接下來咱們直接執行docker-compose.yaml文件便可,可是這裏必定要注意,就是項目的配置文件中的而數據庫鏈接,要改爲和docker-compose中的數據庫的services的名稱一致,因此爲了測試docker,我在git上建立了一個 esoftor4docker的分支' cd /esoftor-api-master docker-compose build docker-compose up
這裏補充說明下:這裏的腳本的類型(shell或批處理)選擇,是由你環境決定的,這個環境指的是,你當前的要執行這塊腳本的環境是否支持相關指令,打比方說,如今咱們這裏實在Windows下執行,由於咱們的cmd支持dotnet和docker以及docker-compose,因此沒有任何障礙即可執行成功;再好比Linux或者docker中單獨安裝的Jenkins,那麼,就須要確保當前的Linux或者容器 支持dotnet和docker 及docker-compose ,換句話說,你必須先安裝或者pull下來這些服務或者鏡像,可不要隨便照網上的隨便抄,抄完你會後悔的
這時候點擊應用並保存便可.這裏使用到的依舊是基於咱們上一篇的內容,一個Dockerfile一個docker-compose.yml文件,這兩個的配置稍有更改,參考以下:
Dockerfile:
# 基於microsoft/dotnet:2.1-sdk or dotnet:latest 默認latest 來建立咱們的鏡像 FROM microsoft/dotnet #指定docker的工做目錄爲 esoftor-master文件夾,也就是容器的默認的文件夾 WORKDIR /usr/local/src/esoftor-api-master #WORKDIR /esoftor-api-master # docker對外暴露的端口 EXPOSE 60000 # 將當前文件夾下的全部文件所有複製到工做目錄(若是是在docker進行持續性繼承,該行註釋掉),若是單純的只是遷移到docker,這裏須要取消註釋 COPY . /usr/local/src/esoftor-api-master #CMD dotnet ESoftor.WebApi.dll 這裏自行百度 CMD和ENTRYPOINT的區別 ENTRYPOINT ["dotnet", "ESoftor.WebApi.dll"]
docker-compose.yml
version: "3" services: esoftor.api: image: esoftor.api:v1.0 environment: - ASPNETCORE_URLS=http://0.0.0.0:60000 - ConnectionString=Server=sql.data;User=sa;Password=520Tmc1314!;Database=esoftor.source.novel2; build: context: ./ dockerfile: Dockerfile ports: - "8089:60000" volumes: - ./:/usr/local/src/esoftor-api-master container_name: esoftor.api depends_on: - sql.data sql.data: image: microsoft/mssql-server-linux:2017-latest environment: - SA_PASSWORD=520Tmc1314! - ACCEPT_EULA=Y ports: - "14333:1433"
將這兩個文件放到你的項目的項目中便可:
注意點:
1.這裏須要注意的是,這兩個文件須要設置屬性 爲可複製 或者始終複製
2.Dockerfile和docker-compose中的路徑配置必定要一致,docker-compose中的 volumes 的映射,冒號後面的路經必須是絕對路徑,不然會報錯
3.docker-compose.yml中的數據庫鏈接配置和項目的鏈接配置記得要一直,其餘.
這時候咱們的jenkins就配置完了,點擊等待構建完成,這時候能夠看構建的日誌內容:以下::
到這裏就能夠看到和咱們上一篇的執行的熟悉的結果了.
這時候咱們看下咱們的docker容器的列表:
能夠看到咱們的項目和數據庫都跑起來了,再看下是否能夠訪問:
嗯,熟悉的界面,熟悉的感受.就這樣!
1. dotnet not found:
可能的緣由是: 1).沒有安裝docker沒有pull microsoft/dotnet的鏡像
2).容器(系統)和構建用的指令不一致,也就是要區分下 windows用的是 批處理,linux用的shell.
2. ERROR: for esoftor.api Cannot create container for service esoftor.api: invalid volume specification: '/host_mnt/d/esoftor-api-master:./esoftor-api-master:rw': invalid mount config for type "bind": invalid mount path: './esoftor-api-master' mount path must be absolute
volumes:
- ./:/usr/local/src/esoftor-api-master
3.Build timed out (after 10 minutes). Marking the build as aborted.
這個問題也是很明顯的,構建超時,,,其實否則,是你的配置有問題(若是你那個肯定的程序沒有問題的話).能夠在 jenkins的執行日誌的頁面,ctrl+f輸入exit進行搜索,通常的若是構建失敗,上面確定有某個或者某幾個步驟是錯誤的,會提示exit.
4.No executable found matching command "dotnet-.....dll"
這個問題其實本質上仍是文件找不到的問題或者,執行 dotnet命令的時候,沒有找到對應的 xx.dll文件對象;只是這個錯誤的提示方式是有點容易讓人誤解能夠參考老這裏: https://github.com/dotnet/core-setup/issues/1126
這裏的一個回覆實際上是很好地解釋了這個,感受像中文咬文嚼字的感受,,,,:下面這各位老兄說的很合理,這是一個誤導性的錯誤提示:
5.其餘....部分忘記記錄了,,,,,遇到再留言吧.