一、安裝Gitlab
參考 https://about.gitlab.com/installation
1.准備工作
以Centos7為例,准備一台至少內存為 4G 的機器
2.安裝依賴軟件
sudo yum install -y git vim gcc glibc-static telnet sudo yum install -y curl policycoreutils-python openssh-server sudo systemctl enable sshd sudo systemctl start sshd sudo yum install postfix sudo systemctl enable postfix sudo systemctl start postfix
3.設置gitlab安裝源
vi /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] name=Gitlab CE Repository baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck=0 enabled=1
4.安裝Gitlab
sudo yum install -y gitlab-ce # 安裝完成后可以使用下面的命令進行啟動配置 sudo gitlab-ctl reconfigure # 查看狀態 gitlab-ctl status
5.登錄和修改密碼

根據提示修改初始密碼,然后創建賬號,再創建一個項目,就算安裝完成了。
二、GitLab CI 服務器的搭建
現在我們換一台機器安裝
1.安裝Docker
// todo
2.安裝gitlab ci runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
yum install gitlab-ci-multi-runner -y
# 查看是否運行正常
gitlab-ci-multi-runner status
# 設置docker 權限
usermod -aG docker gitlab-runner
service docker restart
gitlab-ci-multi-runner restart
3.注冊一個runner

進入到demo 里面,點擊如圖位置
ps: demo 項目是一個maven 管理的 springboot 項目,可以自行創建

這兩個值后面會用到,先進入到這個頁面,然后開始注冊runner
gitlab-ci-multi-runner register
# 如下圖所示配置

192.168.31.188 這個機器是安裝docker 和 gitlab ci 的機器
注冊好之后,可以看到

然后我們重啟一下runner ,就可以正常使用了。
gitlab-ci-multi-runner restart

現在為止,gitlab 的工作是准備好了。
三、配置項目
安裝下maven 和 jdk
主要是Dockerfile 和 .gitlab-ci.yml 這兩個文件
Dockerfile:
FROM openjdk:8-jdk-alpine VOLUME /tmp ADD target/demo-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8086 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
.gitlab-ci.yml:cache:
key: maven-repository-cache paths: - /usr/local/maven/repo variables: MAVEN_OPTS: "-Dmaven.repo.local=/usr/local/maven/repo" # 本次構建的階段:build package stages: - compile - package - dock # 構建 Job build: stage: compile tags: - maven script: - echo "=============== 開始編譯構建任務 ===============" - mvn compile # 打包 package: stage: package tags: - maven script: - echo "=============== 開始打包任務 ===============" - mvn package -Dmaven.test.skip=true artifacts: paths: - target/*.jar dock: stage: dock tags: - maven script: - docker build -t xin-demo . - if [ $(docker ps -aq --filter name=demo) ]; then docker rm -f demo;fi - docker run -d -p 8086:8086 --link=mysqldx:mysql --name demo xin-demo
// 如果容器已經存在的話,就先刪除
- if [ $(docker ps -aq --filter name=demo) ]; then docker rm -f demo;fi
// 這里可以將maven 打包好的文件傳遞給下一個 stage ,然后下一步的docker 就可以根據 這個 jar 包 和Dockerfile 構建鏡像artifacts: paths: - target/*.jar// 這里--link 連接到了另一個mysql 容器的網絡,在項目里面可以使用 mysql 代替 mysql的 ip 地址
// eg: jdbc:mysql://mysql:3306/test- docker run -d -p 8086:8086 --link=mysqldx:mysql --name demo xin-demo

然后我們將代碼提交到 gitlab ,就可以進行自動 CI/CD了。


docker 會自動運行容器,然后我們可以請求下項目里面的接口測試下。

可以看到已經可以正常返回了。這樣我們就可以把代碼提交到gitlab 上之后讓它自己進行自動的 測試部署了,很方便吧。當然不一定每次修改了都要進行構建鏡像發布,我們把stage運行做一個限制,讓它只在master 分支合並的時候進行構建鏡像與部署。

