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

本文到此就结束了,有啥疑问能够在评论区评论,或者有啥更好的建议也能够在评论区说明

相关文章
相关标签/搜索