Docker安裝Gitlab和Gitlab-Runner並實現項目的CICD

  • 2019 年 11 月 5 日
  • 筆記

介紹如何在Linux系統使用Docker安裝Gitlab、Gitlab-Runner並實現項目的CICD

一、安裝Gitlab

1、拉取鏡像並啟動 由於伺服器的80埠可能被佔用,所以這裡我們改成了其他埠來啟動

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

2、修改配置文件 修改gitlab.yml文件

vim /src/gitlab/data/gitlab-rails/etc/gitlab.yml  

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

修改gitlab.rb文件

vim /srv/gitlab/config/gitlab.rb  

找到external_url,默認是被注釋的,要打開,並填寫暴露出去的http://ip:port,IP一定要和gitlab.yml文件配置的相同,port為你啟動時指定的,我們這裡是5678,最後加上ssh協議下使用的IP和埠(這裡的埠是你啟動時指定的,我們這裡是2222),最後保存並退出

停止並移除之前啟動的gitlab

# 停止  docker stop gitlab  # 移除  docker rm gitlab

重新啟動gitlab 這裡要將容器埠改為5678

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

二、安裝Gitlab-Runner

可以在某個項目里settings –> CICD –> Runner進行配置,也可以在GitLab主設置頁安裝共享Runner,安裝方法都一致

1、拉取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  

2、進入Runner容器內

docker exec -it gitlab-runner bash

3、運行以下命令

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

4、修改Runner配置文件

vim /srv/gitlab-runner/config/config.toml

找到volumes配置,修改為如下,分別是掛載了宿主機的docker和配置Maven的快取,提高效率

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

在volumes配置下方增加一行配置,防止Runner重複拉取鏡像

pull_policy = "if-not-present"

重啟Runner即可

docker restart gitlab-runner

三、創建SpringBoot項目測試CICD

.gitlab-ci.yml文件

1、在項目根目錄創建個Dockerfile

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

2、項目根目錄創建.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

3、將項目提交到Gitlab倉庫即可