纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例

文章目录

  • 纯手工搭建 GitaLab与 Gitlab-CI/CD---干货
  • 1、准备工作
    • 1.1 服务器准备
    • 1.2 软件准备
  • 2、Gitlab 的安装
    • 2.1 安装 gitlab 相关命令
    • 2.2 设置管理员帐户密码
  • 3、Gitlab-Runner 安装
    • 3.1 先安装必要软件
    • 3.2 安装 Gitlab-Runner
      • 3.2.1 安装 gitlan-runner
      • 3.2.2 注册runner
      • 3.2.3 gitlab-runner 的命令
  • 4、实践-自动化部署 java SpringBoot 项目
    • 4.1 配置一个 gitlab-runner
    • 4.2 编辑 .gitlan-ci.yml
    • 4.3 提交代码验证项目的构建与部署
  • 5、遇到的问题
    • 5.1 gitlan 内存不够【gitlab.rb】
    • 5.2 sudo 命令执行问题
    • 5.3 deploy执行服务器 sh 脚本卡在 running 不动
  • 附:

纯手工搭建 GitaLab与 Gitlab-CI/CD—干货

作者:javastarboy

背景:前几年(2018 年前后)的 jenkins+docker+k8s 的CI/CD 在工作之中受益不少。提升了不少工作效率。而随着这几年的使用发现,目前 gitlab-CI/CD 在持续集成部署中更加方便、高效。 尤其是在测试环节中,研发无需编写复杂的 jenkins 脚本,只要提交代码,即可自动构建部署。 环境的处理也与 git 思想一致,在敏捷迭代中,效果显著。 最近,小编的其中一个客户也有此方面诉求,便着手搭建了一下这套流程,奈何网上资料过于零散,虽然仅用一天时间便搭建起来,但是我认为,前面已经这么多人(项目组)用过了,在开源的浪潮下,就不应该让后人这么繁琐的搭建这套流程。 所以此篇文章旨在读此一篇,便可拿到所有资料链接、便可成功搭建 Gitlab-CI/CD。

1、准备工作

1.1 服务器准备

  • 服务器两台:实际使用中,gitlab 与 gitlab-runner 会分开使用(后文介绍)
    • Gitlab 服务器:4C8G 5M宽带【如果 2C4G 基本上会经常卡死】
    • Gitlab-Runner 服务器:2C4G(runner 比较吃内存,实际使用中建议根据需要搭配,这里学习使用,仅用 4G)。 当然,项目中 runner 也可使用 docker + k8s 更加便利。
  • 服务器版本
    我最后用的是 CentoOS7.6 (因为在 CentoOS8 中,在安装 gitlab 过程中会有命令兼容问题,我 gitlab 用的是腾讯云,gitlab-runner 用的阿里云,这两个云自研的 OpenCloud8 都有问题。所以建议使用原生的 CentoOS7.6,可以规避很多问题
  • 服务器的购买
    无论买哪个,一定要珍惜自己的新人机会,就一次,能省下很多钱
    • 阿里云:各方面都挺好,但仅新用户合适,老用户真的太贵了。 建议珍惜新人优惠,赶在双 11 一次性买个三年的, 小编买的是 2C8G5M 宽带 3年 g5 服务器,当时才 700 多,现在已经 8000 多了。
    • 腾讯云:性价比较高,小编买的是新人优惠 188 元 1 5 个月 2C4G6M 宽带轻量级
    • 华为云:主要是企业用的多,个人学习不建议
    • 京东云:用的太少了,不建议买

1.2 软件准备

此文章写于 2023 年 3 月 5 日,相关软件版本用的当下最新版

  • Gitlab CE(社区版) 15.9.2
  • gitlab-runner 15.9.1
  • JDK 11 (这个无所谓,根据项目选择)
  • Git 2.31.1
  • maven 3.6.3

2、Gitlab 的安装

安装参考链接
官网 gitlab ce 安装包

2.1 安装 gitlab 相关命令

  • 安装依赖包

    yum install -y curl policycoreutils-python openssh-server
    
  • 设置 SSH 开机自启动并启动 SSH 服务

    systemctl enable sshd
    systemctl start sshd
    
  • 安装 Postfix

    yum install -y postfix
    
  • Postfix 设置

    # 设置 Postfix 服务开机自启动
    systemctl enable postfix
    # 打开 Postfix 的配置文件 main.cf
    vim /etc/postfix/main.cf
    

    按 i 进入编辑模式,删除 inet_interfaces = all 前的 #,在 inet_interfaces = localhost 前加上 #。修改完成后如下图所示。 然后按 Esc 并输入 :wq 保存修改并退出文件
    在这里插入图片描述

  • 启动 Postfix

    systemctl start postfix
    
  • 执行以下命令,添加 GitLab 软件包仓库(CentoOS 8.2以上会有问题)

     curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
    
  • 安装 GitLab

    sudo EXTERNAL_URL="服务器的公网IP地址" yum install -y gitlab-ce
    
  • 在本地浏览器中访问已获取的公网 IP,返回页面如下所示,则表示已成功安装 GitLab
    纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例_第1张图片

2.2 设置管理员帐户密码

  1. 获取管理员帐户默认密码
    bash cat /etc/gitlab/initial_root_password
    纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例_第2张图片
  2. 登录 GitLab
    在本地浏览器中访问云服务器的公网 IP,进入 GitLab 登录界面。使用 root 帐户及已获取的登录密码进行登录
  3. 修改管理员帐户密码
    由于保存默认密码的文件将在首次配置运行24小时后自动删除,请尽快修改 root 帐户登录密码。选择页面右上角的用户头像,在弹出菜单中选择 Perferences。在 “User Settings” 页面中,选择左侧导航栏的 Password。在页面中输入目前使用密码,新密码及确认新密码后,单击 Save Password 即可。如下图所示:
    纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例_第3张图片
  • 创建项目与Add SSH Key 属于工具的使用,这里不赘述了,大家可以自行验证。
    也可转此文章:SSH Key的操作

3、Gitlab-Runner 安装

3.1 先安装必要软件

  1. 安装 Git
    # 安装 git
    yum -y install git
    # 查看是否安装成功
    git --version
    
  2. 安装 jdk11
    # 查找openjdk
    yum search java|grep jdk
    # 或者带颜色查找,看着方便点
    yum search java | grep -i --color jdk
    # 选择需要的文件进行安装(以 1.8 为例)
    yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel 
    # 或者如下命令,安装 open jdk1.8 的所有文件(省事)
    yum install -y java-1.8.0-openjdk*
    
    # ========================================
    
    # 其他命令
    # 查找已安装的jdk
    yum list installed | grep [java][jdk]
    # 卸载所有openjdk相关文件
    yum -y remove java-1.8.0-openjdk*
    # 安装OpenJDK 8 JRE 
    yum install java-1.8.0-openjdk
    # 安装OpenJDK 8 JDK
    yum install java-1.8.0-openjdk-devel
    # 查找已安装的jdk
    yum list installed | grep [java][jdk]
    # 卸载所有openjdk相关文件
    yum -y remove java-1.8.0-openjdk*
    
  3. 安装 maven 3.6.3
    • maven 官方下载地址
      纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例_第4张图片
    • 将下载好的maven安装包放在磁盘的 /usr/local/ 目录下,如下图:
      在这里插入图片描述
    • 解压apache-maven-3.6.3-bin.tar.gz文件。如下图:在这里插入图片描述
    • 将解压后的文件夹改成一个短一点的名字:maven3.6
      mv /usr/local/apache-maven-3.8.6/ /usr/local/bin/maven3.6
      
    • 修改 maven settings.xml 仓库镜像地址为阿里云镜像(否则下载依赖会很慢)
      <mirror>
      	<id>alimavenid>
      	<name>aliyun mavenname>
      	<url>http://maven.aliyun.com/nexus/content/groups/public/url>
       	<mirrorOf>centralmirrorOf>
      mirror>
      
    • 配置maven环境变量,编辑:vi /etc/profile 文件
      # 输入如下命令打开配置文件
      vi /etc/profile
      # 输入 i 进入编辑模式
      export MAVEN_HOME=/usr/local/bin/maven3.6
      export PATH=$PATH:$MAVEN_HOME/bin
      # 按 esc 键,然后疏忽 :wq 回车保存
      # 输入如下命令,生效配置
      source /etc/profile
      # 输入命令,验证安装是否成功,打印出 maven 版本即成功,如图:
      mvn -v 
      
    在这里插入图片描述

3.2 安装 Gitlab-Runner

注意:此时已经切换到另外一台服务器了,后面CI/CD 主要在这里执行

3.2.1 安装 gitlan-runner

# Download the binary for your system
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

# Give it permission to execute
sudo chmod +x /usr/local/bin/gitlab-runner

# Create a GitLab Runner user
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

# Install and run as a service
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例_第5张图片
纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例_第6张图片

3.2.2 注册runner

1、命令注册

# 注册命令(注意 gitlab 服务器地址以及获取 token 方式见后图)
sudo gitlab-runner register --url `http://你 gitlab 服务器的公网IP`/ --registration-token  `我是项目的token值(获取方式见后图)`

# 接下来就是输入一些列命令,按照提示操作即可,示例如下($为服务器的步骤提示):

# 1. 填写gitlab的地址,确保容器内能够顺利访问到该地址
$ Enter the GitLab instance URL (for example, https://gitlab.com/):
输入:http://gitlab服务器公网ip/
# 填写需要注册的runner token,此处选择shared runner token【获取方式见后面截图】
$ Enter the registration token:
输入:BHRagrsztQAxdMPPhxGm
# 描述信息随意填写,也可不填
$ Enter a description for the runner:
输入:gitlab-runner-01
# tag随意填写
$ Enter tags for the runner (comma-separated):
输入:lmx-runner-4
# 随意填写,可不填
$ Enter optional maintenance note for the runner:

Registering runner... succeeded
# 选择执行器的种类,建议选择docker【小编为演示方便,选择了 shell】
$ Enter an executor: docker, shell, ssh, kubernetes, custom, docker-ssh, parallels, virtualbox, docker+machine, docker-ssh+machine:
输入:shell

token 获取位置如图:

Setting -> CI/CD -> Genneral pioelines settings -> Expand
纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例_第7张图片
2、回到 gitlab 查看 runne
gitlab 页面如下,部分信息可以再次修改
纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例_第8张图片
纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例_第9张图片

3.2.3 gitlab-runner 的命令

# 启动 重起 停止
gitlab-runner start
gitlab-runner restart
gitlab-runner stop
# 查看gitlab-runner运行状态 
gitlab-runner status

4、实践-自动化部署 java SpringBoot 项目

4.1 配置一个 gitlab-runner

见 3.2.2 注册runner 章节的注册一个 runner 说明

4.2 编辑 .gitlan-ci.yml

gitlab-ci templates
1、先初始化 .gilab-ci.yml 文件,然后编辑脚本
纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例_第10张图片
2. 编写一个 java SpringBoot 项目的 .gitlab-ci.yml

# 定义一些变量, 下面各阶段会使用
variables:
  # 运行的 jar 名称
  JAR_NAME: test-0.0.1-SNAPSHOT.jar
  # jar 包存放位置,不能是 git 目录,否则下一个 stage 阶段会清除文件, 这里默认放到上一级了
  JAR_PATH: ../

# 本次构建的阶段: test、package、deploy
stages:
  - test
  - package
  - deploy

# 测试流水线
test:
  stage: test
  tags:
    - lmx-runnser-4
  only:
    - main
  script:
    - echo "流水线成功运行!"

# 打包
package:
  stage: package
  tags:
    - lmx-runnser-4
  only:
    - main
  script:
    - echo "=============== 开始install任务  ==============="
    - pwd
    - mvn clean
    - mvn package
    - rm -rf $JAR_PATH/$JAR_NAME 
    - mv ./target/$JAR_NAME $JAR_PATH/$JAR_NAME
    - cd $JAR_PATH
    - ls
 
# 启动jar包
deploy:
  stage: deploy
  tags:
    - lmx-runnser-4
  only:
    - main
  script:
    - echo "=============== 开始部署任务  ==============="
    - cd $JAR_PATH
    - pwd
    - ls
    - ./test.sh
    - echo "发布完成!"
  • test.sh 脚本如下
#!/bin/bash
set -ex

pkill -9 java
nohup java -Dfile.encoding=utf-8 -jar test-0.0.1-SNAPSHOT.jar > test.log

exit 0

4.3 提交代码验证项目的构建与部署

1、查看构建状态
纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例_第11张图片
2、浏览器输入自己的 test 接口,验证一下项目运行情况
纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例_第12张图片

5、遇到的问题

5.1 gitlan 内存不够【gitlab.rb】

报错:fatal: The remote end hung up unexpectedly
解决:git config --global http.postBuffer 524288000
查看:git config --global --list
继续报错:fatal: Out of memory, malloc failed (tried to allocate 262144000 bytes)
解决(内存不足,干脆删掉):git config --global --unset http.postbuffer
写的比较详细的链接可参考,主要是调整 gitlab.rb 配置参数(我目前试了没搞定)

5.2 sudo 命令执行问题

报错:sudo: /usr/libexec/sudo/sudoers.so 必须属于用户 ID 0(的用户)
sudo: 在加载插件“sudoers_policy”时在 /etc/sudo.conf 第 14 行出错
问题原因:有人将/usr/bin/sudo的权限改为777或将目录/usr的权限授权给非root用户了
解决办法:

chmod 4755 /usr/bin/sudo
chown -R root:root /usr

5.3 deploy执行服务器 sh 脚本卡在 running 不动

尚未解决
纯手工搭建 GitaLab与Gitlab-CI/CD--附 gitlab-ci.yml示例_第13张图片

附:

Gitlab CI/CD 简单介绍
Gitlab CI/CD 介绍
Gitlab-Runner 相关命令

你可能感兴趣的:(自动化发布,Gitlab,Gitlab-CI/CD,java,git,自动化)