新建Gitlab倉庫
先在Gitab上創建一個代碼倉庫,選擇創建空白項目
安裝說明進行填寫,然后點擊創建項目
創建好的倉庫是空的,什么都沒有
新建一個springboot項目,用于代碼上傳使用。
只是為了測試代碼上傳功能,所以代碼很簡單,寫一個控制器類,然后返回一個字符串。
項目的完整代碼已經打包,下載地址:https://download.csdn.net/download/liangmengbk/90633199
代碼編寫完成,使用Git完成代碼的提交。?
選中項目文件夾,右鍵,選擇Git,然后選擇提交文件夾,如下圖:
把顯示模式改為文件夾顯示
選中src文件夾中的內容和pom.xml文件,點擊提交
到這里為止,把代碼提交到了本地的倉庫中,現在需要把代碼上傳到遠程倉庫(前面已經搭建好的GitLab)
下面開始向遠程倉庫進行代碼的提交
配置遠程倉庫地址
輸入遠程倉庫的地址URL
?
配置好遠程倉庫地址后,點擊push
輸入Gitlab的用戶名和密碼
用戶名:root
密碼:12345678@? (密碼是在創建Gitlab時自己設置的)
等待片刻,idea右下角會顯示已經將代碼提交到遠程倉庫。
打開Gitlab的項目頁面,切換到master分支
就可以看到剛才提交的代碼
到此,完成了Gitlab新倉庫的創建及代碼提交到Gitlab倉庫中。
使用Jenkins完成代碼的自動拉取
在Jenkins中新建一個任務
自己定義一個名稱(不需要與Gitlab完全一致),選擇自由風格。
配置完成,點擊應用,保存。
回到Jenkins首頁,就可以看到剛才創建的任務。
點擊任務名稱,進入到任務中,選擇構建任務
構建過程中,左下角會顯示構建的進度條?
構建完成
點擊這條記錄,選擇控制臺輸出,就能看到具體的執行過程。
驗證下Jenkins是否真正的拉取到了文件,進入Jenkins所在的服務器(192.168.1.10),找到/var/jenkins/workspace目錄,看里面是否有Jenkins創建的工程文件夾(myproject-ci)
進入到工程文件夾里面,看是否有上傳的代碼文件
到此,Jenkins已經成功拉取到了Gitlab倉庫中的代碼文件。
說明:這里為什么能夠在宿主機上(而不是Jenkins容器內部)看到Jenkins工程,是因為前面已經將/var/jenkins 目錄掛載到Jenkins容器內部了。Jenkins操作的實際就是宿主機上文件。
Jenkins就是把原來人工要操作的命令,現在由Jenkins幫助我們自動構建。
在Jenkins中對代碼進行編譯
前面只是把源代碼拉取到了Jenkins工程中,如果要變成產出物,還需要對源代碼進行編譯操作。
在myproject-ci工程中,找到配置
在Build中選擇執行shell
sh /usr/local/maven/bin/mvn package
shell腳本說明,使用maven來執行package命令,將源代碼編譯,自動測試,并打包,形成jar文件,這個過程由maven自動完成。
填寫完成,點擊應用、保存
點擊立即構建
通過查看構建的控制臺,確實構建是否成功。
最后出現SUCCESS表示成功?
出現問題并解決(如果沒有問題,則跳過這個步驟)
在構建的時候,發生了錯誤,無法訪問到阿里云倉庫,報錯信息如下圖:
針對這個問題,排查了一下,大概原因是用macvlan網絡模式導致的。嘗試進行修復,并沒有解決網絡問題。
最后決定不使用macvlan,使用默認的橋接網絡模式。
執行如下腳本,將Gitlab和Jenkins的網絡模式均改為默認網絡模式,不使用macvlan。
0.通過docker ps命令,找到Gitlab和Jenkins的容器ID
1. 停止并刪除當前容器(注意是兩個容器ID放到一行 中間是空格)
docker stop 3e982db0c15f 707d31917085
docker rm 3e982db0c15f 707d31917085
2. 使用bridge網絡模式重新創建GitLab容器
docker run -d --name gitlab \
? --hostname gitlab.example.com \
? --restart=always \
? -p 83:80 -p 443:443 -p 2222:22 \
? -v /etc/gitlab:/etc/gitlab \
? -v /var/log/gitlab:/var/log/gitlab \
? -v /var/opt/gitlab:/var/opt/gitlab \
? gitlab/gitlab-ce
3. 使用bridge網絡模式重新創建Jenkins容器
docker run -d --name jenkins \
? --restart=always \
? -p 8083:8080 -p 50000:50000 \
? -v /var/jenkins/:/var/jenkins_home/ \
? -v /usr/local/jdk:/usr/local/jdk \
? -v /usr/local/maven:/usr/local/maven \
? -e JENKINS_UC=https://mirrors.cloud.tencent.com/jenkins/ \
? -e JENKINS_UC_DOWNLOAD=https://mirrors.cloud.tencent.com/jenkins/ \
??jenkins/jenkins:lts
4. 獲取GitLab容器的IP地址
GITLAB_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' gitlab)
5. 配置Jenkins容器使其能夠訪問GitLab
docker exec -u 0 -it jenkins bash -c "echo '$GITLAB_IP gitlab.example.com gitlab' >> /etc/hosts"
6. 測試連接
# 測試Jenkins容器能否訪問互聯網
docker exec -it jenkins ping -c 4 8.8.8.8# 測試Jenkins容器能否訪問GitLab
docker exec -it jenkins ping -c 4 gitlab.example.com
7.在Jenkins項目配置中將Git倉庫URL從http://192.168.1.240/root/myproject-ci更改為http://gitlab.example.com/root/myproject-ci
通過以上操作,把原來的容器刪掉,基于原有的docker鏡像,重新創建了新的Gitlab容器和Jenkins容器。
上面的腳本執行完畢后,Gitlab容器和Jenkins容器就沒有自己獨立的ip了(因為不是macvlan模式)。
Gitlab訪問地址:http://192.168.1.10:83/
Jenkins訪問地址:http://192.168.1.10:8083/
用戶名和密碼還是之前的,Gitlab:root/123456@? ??Jenkins:root/root
再次點擊構建,成功拉取到了依賴,完成打包的操作。