Docker Gitlab Gitalb-runner 实现自动化部署

前言

默认已经安装过 docker 和 docker-compose ,官网有教程,很详细

注意:gitlab 很耗内存,如果你内存只有 2G 左右会出现问题

之前有用 docker 部署过 gitlab-runner 和 gitlab 的话要把所有挂载的文件删掉,可能会影响到本次容器部署

废话少说,直接开始

用 Docker 部署 gitlab

1、搜索镜像

docker search gitlab 搜索一个常用的镜像

这里使用 gitlab/gitlab-ce

2、运行容器

编写 docker-compose.yml 文件将容器运行

version: "3"
services:
  gitlab:
    container_name: gitlab
    image: `gitlab/gitlab-ce`
    hostname: '{没有域名填写服务器 ip}'
    ports:
      - "10022:22"
      - "10080:10080"
      - "10443:10443"
    volumes:
      - "{自定义路径}/gitlab/data:/var/opt/gitlab"
      - "{自定义路径}/gitlab/config:/etc/gitlab"
      - "{自定义路径}/gitlab/log:/var/log/gitlab"
    privileged: true

输入 docker-compose up -d 运行容器

3、修改配置文件

修改 gitlab.rb 文件,在 {自定义路径}/gitlab/config 路径下

添加以下配置

external_url 'http://{你的 ip 或者域名}:10080
gitlab_rails['gitlab_shell_ssh_port'] = 10022

或者修改配置文件里的配置也可以

4、访问 gitlab 并设置密码

在浏览器输入 http://{你的 ip 或者域名}:10080 访问 gitlab,第一次会让设置密码,用户名为 root

如果访问失败或者 502 就再等等,这东西启动贼慢


用 Docker 部署 gitlab-runner

1、搜索镜像

docker search gitlab-runner 搜索一个常用的镜像

这里使用 gitlab/gitlab-runner

2、运行 gitlab-runner

version: "3"
services:
  gitlab-runner:
    container_name: gitlab-runner
    image: gitlab/gitlab-runner
    volumes:
      - "{自定义路径}/gitlab-runner-config:/etc/gitlab-runner"
      - "/var/run/docker.sock:/var/run/docker.sock"
    environment:
      - "CA_CERTIFICATES_PATH=/DIR/CERT"
    restart: always

编写好 docker-compose.yml 后输入 docker-compose up -d 运行


新建项目并且注册 gitlab-runner

1、新建仓库,并新建 SpringBoot 项目上传

访问 gitlab 创建一个新的仓库

jenkis gitlab docker部署 gitlab runner docker executor_docker

jenkis gitlab docker部署 gitlab runner docker executor_搜索_02

点击 Create project 创建

用 IDEA 创建一个新的 SpringBoot 项目

写好一个测试接口

@GetMapping("test")
public String test() {
    return "test"
}

在项目根目录右击 Git Bash

输入以下命令

git init
git remote add origin 你的项目地址
git add .
git commit -m "Initial commit"
git push -u origin master

2、注册 gitlab-runner

在服务器输入,docker exec -it gitlab-runner gitlab-runner register

根据提示依次输入

jenkis gitlab docker部署 gitlab runner docker executor_docker_03

url 和 token 需要进入项目,选择 Setting -> CI/CD -> Runner,获取 url 和 token

jenkis gitlab docker部署 gitlab runner docker executor_git_04

jenkis gitlab docker部署 gitlab runner docker executor_搜索_05

注册成功后进入 gitlab-runner 的配置路径下,找到 config.toml 文件

修改添加这三行代码

jenkis gitlab docker部署 gitlab runner docker executor_git_06

3、编写 Dockerfile、docker-compose.yml 和 .gitlab-ci.yml 文件,完成自动部署

首先需要制作一个 maven + jdk8 的镜像

Dockerfile:

FROM openjdk:8u171
FROM maven:3.6.3-openjdk8
# 可以上 docker hub 上搜索自己需要的版本

写好后执行 docker build -t maven-build . 生成镜像

之后在SpringBoot项目的根路径下编写以下三个文件

Dockerfile:

# jdk8
FROM openjdk:8u171

COPY ./target/{你的项目名}-0.0.1-SNAPSHOT.jar /home/

WORKDIR /home

EXPOSE {你需要暴露的端口}

ENTRYPOINT ["java", "-jar", "{你的项目名}-0.0.1-SNAPSHOT.jar"]

CMD ["/bin/bash"]

docker-compose.yml:

version: "3"
services:
  spring-boot-practice:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: spring-boot-test
    image: spring-boot-test
    ports:
      - "{服务器}:{容器}"

.gitlab-ci.yml:

image: docker:stable

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=${CI_PROJECT_DIR}/.m2"
  MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"

cache:
  key: ${CI_COMMIT_REF_SLUG} # cache is for per branch
  paths:
  # 使用自行配置的 settings.xml,在项目根路径下创建.m2文件夹,添加 settings.xml
    - ${CI_PROJECT_DIR}/.m2

build-job:
  image: maven-build
  tags: 
    - {你注册 runner 填写的 tags}
  stage: build
  script:
    - pwd
    - ls
    - mvn $MAVEN_CLI_OPTS clean package
  artifacts:
    paths:
      - target/{你的项目名}-0.0.1-SNAPSHOT.jar


test-job:
  tags: 
    - {你注册 runner 填写的 tags}
  stage: test
  script:
    - echo "This job tests something"

deploy-prod:
  image: docker-compose
  tags: 
    - {你注册 runner 填写的 tags}
  stage: deploy
  script:
    - docker build -t spring-boot-test .
    - docker-compose up -d
    - docker images|grep none|awk '{print $3 }'|xargs docker rmi

修改 SpringBoot 项目接口

@GetMapping("test")
public String test() {
    return "gitlab-ci"
}

提交代码后耐心等待

jenkis gitlab docker部署 gitlab runner docker executor_docker_07

部署成功后访问测试接口,显示 gitlab-ci

自动部署成功!