docker安装gitlab和gitlab-runner,.gitlab-ci.yml详细介绍并配置CI/CD持续化集成部署详细流程

4 篇文章 0 订阅

一、docker安装gitlab

1.拉取gitlab镜像

docker pull gitlab/gitlab-ce

2.启动镜像

docker run -d  -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart=always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

-d:后台运行
-p:将容器内部端口向外映射
–name:命名容器名称
-v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录

3.修改配置文件

vim /home/gitlab/config/gitlab.rb

修改以下配置,其中192.168.230.6为虚拟机ip,222为第二步中22对应映射端口

#配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://192.168.230.6' 
# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '192.168.230.6' 
# 此端口是run时22端口映射的222端口
gitlab_rails['gitlab_shell_ssh_port'] = 222 

4.重启

docker restart gitlab

5.访问首页

5.1首页地址:192.168.230.6

5.2能正常访问后,查看root用户密码

cd /home/gitlab/config/
cat initial_root_password

在这里插入图片描述

5.3修改密码

点击右上角头像,选中preferences跳转后点击左侧profile选项。

二、docker安装gitlab-runner

1.下载镜像并启动

docker run -d --name gitlab-runner --restart always -v /home/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest

2.进入gitlab-runner容器内

docker exec -it gitlab-runner bash

3.执行以下命令,注册gitlab-runner

gitlab-runner register

输入后还需要输入token,在gitlab中找到token
在这里插入图片描述
在这里插入图片描述
①输入Gitlab实例的地址
②输入token
③输入Runner的描述(可随便输入)
④输入与Runner关联的标签,标签是为了让后期在CI脚本中指定选择某个或者多个 Runner,这里我们设置他的标签为test,你们可以设置其他的
⑤流道的可选维护注意事项(不清楚,随便输入)
⑥输入Runner的执行器,由于我们都是基于Docker,所以这里选择执行器为Docker
⑦设置执行器的版本

4.修改配置文件

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

找到volumes配置,修改结果为如下,分别是挂载了宿主机docker的sock文件和Maven的缓存,减少拉取Jar包的时间消耗,其中"/data/.m2/😕.m2/"这块为Maven的Jar包存放地址,左边为宿主机目录,右边为容器内的Jar包存储路径,这个需要根据自己使用的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

在这里插入图片描述

三、测试CI/CD

3.1编写.gitlab-ci.yml

# 全局脚本,会运行在各个阶段的script前,如果某个阶段里面存在before_script,那么以那个阶段里的为主
before_script:
  # 这里定义了打包成功后的Docker镜像名称,每一次提交代码后构建成功的镜像名称都是唯一的
  - echo "提交的标题CI_COMMIT_TITLE $CI_COMMIT_TITLE"
  - echo "提交的作者CI_COMMIT_AUTHOR  $CI_COMMIT_AUTHOR"
  - echo "提交的分支名CI_COMMIT_BRANCH $CI_COMMIT_BRANCH"
  - echo "提交的描述CI_COMMIT_DESCRIPTION $CI_COMMIT_DESCRIPTION"
  - echo "完整的提交信息CI_COMMIT_MESSAGE $CI_COMMIT_MESSAGE"
  - echo "项目的分支名或tag名CI_COMMIT_REF_NAME $CI_COMMIT_REF_NAME"
  - echo "Repository中创建tags的标签CI_COMMIT_TAG $CI_COMMIT_TAG"
  - echo "CI_REGISTRY_IMAGE $CI_REGISTRY_IMAGE"
  - echo "CI_COMMIT_REF_SLUG $CI_COMMIT_REF_SLUG"
  - echo "CI_COMMIT_SHA $CI_COMMIT_SHA"

# 定义CI执行的阶段,这里可以自己根据情况定义多少个阶段
stages:
  - compile
  - build
  - run

#workflow:
#  rules:
#    - if:  $CI_COMMIT_MESSAGE =~ /^deploy:/
#    - if: $CI_COMMIT_TAG

# 定义全局变量
variables:
  PROJECT: "ci-demo"
  # 这里定义了Maven的jar包存放地址,与我们构建maven私服的时候设置的存放地址一致
  MAVEN_REPO: "/.m2"

compile1:
  # 当前阶段的执行镜像,这是我们自己构建的镜像
  image: openjdk:8
  # 属于上面定义的哪一个阶段
  stage: compile
  #满足这个条件才会执行以下步骤,提交信息以 deploy: 开头。例如 deploy:更新代码
  rules:
    - if:  '$CI_COMMIT_MESSAGE =~ /^deploy:*/'
  # 是否允许失败,允许的话如果当前阶段运行失败还会继续执行下一个阶段
  allow_failure: false
  # 只在哪个分支生效
#  only:
#    - main
  # 这里就是你要选择哪个runner来执行了,填写我们创建runner时候指定的标签
  tags:
    - test
  # 运行脚本
  script:
    - source /etc/profile
    - echo "开始执行compile1步骤了,CI_COMMIT_MESSAGE= $CI_COMMIT_MESSAGE "
#    - mvn -Dmaven.repo.local=$MAVEN_REPO clean package -Dmaven.test.skip=true
  # 因为是Maven编译,所以会有Jar包产物,这里定义产物的过期时间
  artifacts:
    name: $PROJECT
    expire_in: 7 days
    paths:
      - target/*.jar
#可以定义多个
#compile2:
#  image: 172.20.9.3:5001/root/maven:latest
#  stage: compile
#  allow_failure: false
#  only:
#    - main
#  tags:
#    - test
#  script:
#    - mvn -Dmaven.repo.local=$MAVEN_REPO clean package -Dmaven.test.skip=true
#  artifacts:
#    name: $PROJECT
#    expire_in: 7 days
#    paths:
#      - target/*.jar

#build1:
#  image: docker:stable
#  stage: build
#  script:
#    # 这里的变量会自动获取你当前推送代码的gitlab用户和密码以及仓库地址
#    - docker login --username $CI_REGISTRY_USER --password $CI_REGISTRY_PASSWORD $CI_REGISTRY
#    # 这里的变量就是我们全局配置定义的了
#    - docker build -t $IMAGE_FULL_NAME .
#    - docker push $IMAGE_FULL_NAME
#    - rm -rf target
#    - docker rmi $IMAGE_FULL_NAME
#  only:
#    - main
#  tags:
#    - test

#run1:
#  image: docker:stable
#  stage: run
#  script:
#    - CONTAINER_NAME=$(docker ps -aq --filter name=$PROJECT)
#    - echo $CONTAINER_NAME
#    - if [[ -n "$CONTAINER_NAME" ]]; then
#      docker rm -f $CONTAINER_NAME;
#      fi
##    - docker run -d --name $PROJECT -p 7777:7777 $IMAGE_FULL_NAME
#  only:
#    - main
#  tags:
#    - test

	.gitlab-ci.yml与pom.xml放在同级目录,以下文件内容为只有当提交代码时,提交消息
以 deploy: 开头才会执行compile1步骤,如若需要执行mvn clean 等命令,需要在linux环境
下载openjdk:8镜像(随便下一个镜像,此处以openjdk:8镜像为例),然后使用docker启动,例如
docker run -it -d openjdk:8
启动后进入容器
docker exec -it 容器id /bin/bash
	然后执行安装maven等操作,然后执行 mvn clean install下载所需依赖,退出容器,
将openjdk:8镜像推送到阿里云,此时openjdk:8镜像中已经有了maven环境以及jar包依赖。
最后	将 image: openjdk:8地址改为提交到阿里云的openjdk:8镜像地址。
注:在执行mvn命令前需要先执行source /etc/profile 使环境变量生效

GitLab Runner变量名称,[官方文档地址]

3.2提交代码后,查看执行结果

在这里插入图片描述
错误排查:若提交代码后Jobs中没有执行,可以到CI/CD目录下的Pipelines中查看失败原因。例如
(1)Before_script配置应该是一个字符串或一个嵌套的字符串数组,深度不超过10层
在这里插入图片描述
(2)compile1任务中 rules和only不能同时使用
在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值