centos7下jenkins部署donetcore 程式
1.在centos7下安裝docker,通過yum來安裝docker,執行如下命令
# yum install docker --安裝docker,最好不要安裝最新版本的Docker,最新版本的docker不穩定可能存在bug
# systemctl start docker --啟動docker服務
# systemctl enable docker --設定開機啟動docker,防止機器關機後,docker服務需要手動啟動
2.安裝完docker後,接下來安裝jdk(因為jenkins是java開發的)以及從網路下載jenkins安裝包,注意 /data/software為我的系統儲存jenkins包的路徑,使用者可以自行設定,注意jenkins的rpm包地址可能失效,失效的話,請登入jenkins官網進行下載,如果嫌網路下載速度慢,可以將離線下載的包,通過sftp工具拷貝到主機上進行安裝
# yum install java 或者 # yum install java-1.8.0-openjdk
wget -P /data/software https://prodjenkinsreleases.blob.core.windows.net/redhat-stable/jenkins-2.138.3-1.1.noarch.rpm
3.轉到/data/software 下,安裝jenkins包
# cd /data/software
# rpm -ivh jenkins-2.138.3-1.1.noarch.rpm
4.啟動jenkins服務,並通過 http://localhost:8080 訪問啟動的jenkins(預設jenkins管理頁面是ip:8080)
# systemctl start jenkins //啟動jenkins服務
# systemctl enable jenkins //開機啟動jenkins服務
5.不出意外將通過地址能夠訪問jenkins,但是也不排除無法訪問jenkins,因為centos7預設防火牆是開啟,導致無法通過瀏覽器訪問jenkins,我們可以通過在執行下面的命令,關閉系統的防火牆
# systemctl stop firewalld.service --關閉防火牆服務
# systemctl disable firewalld.service --取消開機啟動防火牆服務
6.解決無法訪問的問題後,通過地址訪問到如下的頁面
7.在centos7中執行下面的命令得到初始密碼,進行登入操作
# vi /var/lib/jenkins/secrets/initialAdminPassword
8.輸出密碼後,進入如下介面,選擇安裝推薦外掛
9.安裝完推薦的外掛後,進入建立管理員使用者
10.設定完所有的步驟後,終於進入jenkins的管理介面,如下圖
11.jenkins安裝成功後,下面將繼續介紹使用jenkins自動構建自己github上dotnet core程式
12.在jenkins主介面選擇建立新任務,如下圖
12.輸入任務名稱和選擇構建咋樣的風格的任務,選擇完畢後,確定儲存
13.確定後,進入任務配置頁面,在general頁面填寫任務說明與描述,以及設定其他引數資訊
14.填寫general頁面,進行原始碼管理,在這裡我選擇github,使用者可以選擇其他程式碼管理方式
15.進入centos7中執行命令,安裝git
16.安裝完成git後,再次檢視之前報錯的頁面,錯誤消失了
17.因為在general頁面配置了引數,我們將在原始碼管理頁面使用,如下圖所示
18.構建觸發器頁面,我這裡不進行任何設定,使用者可以憑藉自己的需求自行設定
19.構建環境頁面,因為想在構建環境頁面,能夠設定Version Number 的資訊,在jenkins的系統設定中,外掛管理安裝Version Number 外掛如下圖,安裝完成後,就可以在構建環境頁面通過Version Number Plug外掛生成優雅的版本號
20.構建頁面,這裡選擇“執行shell”,填寫shll指令碼(這裡最好將shell指令碼命令寫到檔案中,以便後續的修改),在這裡使用shell指令碼,有利於後面的維護操作,不出問題,專案將構建成功
21.儲存後,構建任務,發生錯誤(在jenkins任務控制檯輸出頁面),輸出如下圖,執行 dotnet restore 命令失敗,主要是系統中沒有安裝dotnet環境
22.在centos7中安裝dotnet core執行環境
# rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm --在安裝Net之前,我們需要安裝微軟key以及依賴,這個命令每臺機器只要執行一次就行,安裝dotnet sdk時,根據專案的版本選擇特定的sdk進行安裝
# yum install libunwind libicu --dotnet-sdk需要依賴“libunwind”和“libicu”
# yum install dotnet-sdk-2.0.0 --安裝dotnet-sdk 版本2.0.0
23.在執行構建的過程中出現了“sudo: no tty present and no askpass program specified”的錯誤,原因在於在shell指令碼中,使用sudo命令來提升執行許可權,因為Jenkins伺服器在執行sudo命令時的上下文有誤,導致這個命令執行的異常,以下為解決方式
在Jenkins宿主伺服器上執行如下命令
# sudo visudo
在檔案的末尾加上一行
jenkins ALL=(ALL) NOPASSWD: ALL
重啟Jenkins服務
# systemctl restart jenkins
最後,重新執行構建任務,不會出現先前的錯誤。
如果誤操作修改了/etc/sudoers的許可權來修改上述檔案,則會導致如下所示的錯誤:
sudo :/etc/sudoers is world writable
sudo : no valid sudoers source found, quitting
sudo : unable to initialize poling plugin
這是Linux的一種保護機制。因此,如果出現上述誤操作,則需要執行如下命令來解決:
# pkexec chmod 0440 /etc/sudoers
24.在構建過程中,出現錯誤 shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory,具體的解決方案可以參考如下文章
https://blog.csdn.net/juyin2015/article/details/79233815
25.在執行shell指令碼的過程,執行映象啟動的過程,容器啟動後馬上就關閉了,可以參考下面的文章
https://www.jianshu.com/p/f1e7a1630c64
26.下面是shell檔案的具體內容,供大家參考
27.下面是Dockerfile檔案的內容,供大家參考
28.使用docker exec 命令出現如下的錯誤
rpc error: code = 2 desc = oci runtime error: exec failed:
container_linux.go:247: starting container process caused "process_linux.go:110:
decoding init error from pipe caused \"read parent: connection reset by peer\""
使用者可以通過以下的命令來進行處理
# yum update
# yum downgrade docker docker-client docker-common --before and no idea for what the old version of docker, just run
以上就是完整的過程,總算寫完了,花了不少時間,不足之處,還往大家的見諒。