Docker安裝Gitlab和Runner並實現CICD

本文詳細介紹如何在Linux系統使用Docker安裝Gitlab、Gitlab-Runner並實現項目的CICDjava

1、安裝Gitlab

一、拉取鏡像並啓動

因爲服務器的80端口可能被佔用,因此這裏咱們改爲了其餘端口來啓動git

docker run -d -p 2443:443 -p 5678:80 -p 2222:22 --name gitlab --restart always -v/srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /src/gitlab/data:/var/opt/gitlab docker.io/gitlab/gitlab-ce
複製代碼

二、修改配置文件

修改gitlab.yml文件

vim /src/gitlab/data/gitlab-rails/etc/gitlab.yml
複製代碼

找到以下配置,修改host爲你服務的IP或者域名(不能加http://),修改完畢後保存退出 docker

gitlab.yml.png

修改gitlab.rb文件

vim /srv/gitlab/config/gitlab.rb
複製代碼

找到external_url,默認是被註釋的,要打開,並填寫暴露出去的http://ip:portIP必定要和gitlab.yml文件配置的相同,port爲你啓動時指定的,咱們這裏是5678,最後加上ssh協議下使用的IP和端口(這裏的端口是你啓動時指定的,咱們這裏是2222),最後保存並退出 shell

image.png

中止並移除以前啓動的gitlab

# 中止
docker stop gitlab
# 移除
docker rm gitlab
複製代碼

從新啓動gitlab

這裏要將容器端口改成5678vim

docker run -d -p 2443:443 -p 5678:5678 -p 2222:22 --name gitlab --restart always -v/srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /src/gitlab/data:/var/opt/gitlab docker.io/gitlab/gitlab-ce
複製代碼

2、安裝Gitlab-Runner

能夠在某個項目裏``settings --> CICD --> Runner進行配置,也能夠在GitLab主設置頁安裝共享Runner,安裝方法都一致緩存

一、拉取Runner鏡像並啓動

docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
複製代碼

二、進入Runner容器內

docker exec -it gitlab-runner bash
複製代碼

三、運行如下命令

gitlab-runner register
複製代碼

輸入Gitlab實例的地址

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
http://xxx
複製代碼

輸入token

Please enter the gitlab-ci token for this runner
xxx
複製代碼

輸入Runner的描述

Please enter the gitlab-ci description for this runner
[hostname] my-runner
複製代碼

輸入與Runner關聯的標籤

Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag
複製代碼

輸入Ruuner的執行者

Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker
複製代碼

若是上面執行者爲docker,須要你在.gitlab-ci.yml中指定docker版本

Please enter the Docker image (eg. ruby:2.1):
alpine:latest
複製代碼

經過以上命令後,就能夠在gitlab中查看到了這個剛剛建立的runner ruby

runner-create.png

四、修改Runner配置文件

vim /srv/gitlab-runner/config/config.toml
複製代碼

找到volumes配置,修改成以下,分別是掛載了宿主機的docker和配置Maven的緩存,提升效率bash

volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock","/data/.m2/:/.m2/"]
複製代碼

volumes配置下方增長一行配置,防止Runner重複拉取鏡像服務器

pull_policy = "if-not-present"
複製代碼

重啓Runner便可ssh

docker restart gitlab-runner
複製代碼

3、建立SpringBoot項目測試CICD

這裏就不演示如何建立項目了,不會SpringBoot的自行去學習,這裏只展現.gitlab-ci.yml文件

一、在項目根目錄建立個Dockerfile

FROM openjdk:8-jdk
COPY target/*.jar swarm-test.jar EXPOSE 8000
ENTRYPOINT ["java","-jar","swarm-test.jar"] 複製代碼

二、項目根目錄建立.gitlab-ci.yml文件

# 由於咱們Runner執行器設置爲docker, 因此這裏須要指定docker的版本
image: docker:stable
# 定義三個階段
stages:
 - compile
 - build
 - run
# 定義個變量, 指定maven下載的jar包存放的位置
variables:
 MAVEN_OPTS: "-Dmaven.repo.local=/.m2"
# 第一階段
compile:
  # 打包用到了maven, 全部須要拉取maven鏡像, 這是我本身構建的阿里雲maven私服的maven鏡像
 image: registry.cn-hangzhou.aliyuncs.com/gjing/maven:1.0
  # 指定階段
 stage: compile
  # 運行腳本, 使用變量時要用到 $ 符號
 script:
 - mvn $MAVEN_OPTS clean package -Dmaven.test.skip=true
  # 只做用在master分支
 only:
 - master
  # 建立runner時指定的tag
 tags:
 - test
  # 編譯後有產物,因此要指定下過時時間和路徑, 以供於其餘階段使用
 artifacts:
 expire_in: 1 days
 paths:
 - target/*.jar
# 第二階段, 這裏再也不一一介紹, 和第一階段差很少
build:
 stage: build
 script:
 - docker build -t registry.cn-hangzhou.aliyuncs.com/gjing/test:1.0 .
 - docker login --username xxx --password xxx registry.cn-hangzhou.aliyuncs.com
 - docker push registry.cn-hangzhou.aliyuncs.com/gjing/test:1.0
 only:
 - master
 tags:
 - test
run:
 stage: run
 script:
 - docker run -d --name my-test -p 8000:8000 registry.cn-hangzhou.aliyuncs.com/gjing/test:1.0
 only:
 - master
 tags:
 - test
複製代碼

三、將項目提交到Gitlab倉庫便可

提交到倉庫的master分支後,會自動執行CICD,第一次會比較慢,由於要拉取一些鏡像和下載目前本地庫沒有的jar包,效果圖以下
cicd.png

本文到此就結束了,有啥疑問能夠在評論區評論,或者有啥更好的建議也能夠在評論區說明

相關文章
相關標籤/搜索