温馨提示×

GitLab Linux配置中的自动化脚本

小樊
37
2025-10-25 00:36:33
栏目: 智能运维

GitLab Linux配置中的自动化脚本应用

一、GitLab Runner安装自动化脚本

GitLab Runner是执行CI/CD流程的核心组件,其安装过程可通过脚本自动化完成。以下是基于Docker的快速安装脚本示例:

docker run -d --name gitlab-runner --restart always \
  --env TZ=Asia/Shanghai \
  -v /home/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

该脚本实现了Runner的持久化配置(挂载配置目录)和Docker套接字挂载(支持Docker-in-Docker任务),安装后需通过gitlab-runner register命令注册到GitLab项目。

二、GitLab Server一键部署脚本(Ubuntu/Debian)

针对Ubuntu 20.04/22.04或Debian系统,可编写一键安装脚本,覆盖从系统准备到GitLab配置的全流程。核心步骤包括:

  1. 系统检查与更新:确保以root用户运行,更新系统包;
  2. 依赖安装:安装curl、openssh-server、ca-certificates等必要组件;
  3. 防火墙配置:允许HTTP(80)、HTTPS(443)和OpenSSH服务;
  4. Postfix配置(可选):用于邮件通知,设置为“Internet Site”模式;
  5. GitLab仓库添加:通过官方脚本添加GitLab CE仓库;
  6. 外部URL设置:交互式输入域名或公网IP,自动生成配置;
  7. HTTPS启用(可选):通过Let’s Encrypt配置SSL证书。
    脚本示例片段:
# 检查root权限
if [ "$EUID" -ne 0 ]; then
  echo "请使用root用户运行此脚本"
  exit 1
fi

# 更新系统并安装依赖
apt update && apt upgrade -y
apt install -y curl openssh-server ca-certificates tzdata postfix

# 配置Postfix
debconf-set-selections <<< "postfix postfix/mailname string gitlab.example.com"
debconf-set-selections <<< "postfix postfix/main_mailer_type string 'Internet Site'"

# 添加GitLab仓库并安装
curl -fsSL https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | bash
apt install -y gitlab-ce

# 重新配置GitLab
gitlab-ctl reconfigure

该脚本简化了GitLab Server的部署流程,降低了手动配置错误的风险。

三、.gitlab-ci.yml自动化流程配置文件

.gitlab-ci.yml是GitLab CI/CD的核心配置文件,用于定义项目的构建、测试、部署流程。以下是常见场景的示例:

1. 基础构建/测试/部署流程

stages:
  - build
  - test
  - deploy

variables:
  GIT_SUBMODULE_STRATEGY: recursive  # 递归拉取子模块

build_job:
  stage: build
  image: maven:3.6.3-jdk-8  # 使用Maven镜像
  script:
    - echo "开始构建打包"
    - mvn install
  artifacts:
    paths:
      - target/  # 保存构建产物供后续job使用

test_job:
  stage: test
  image: maven:3.6.3-jdk-8
  script:
    - echo "开始执行代码测试"
    - mvn test

deploy_job:
  stage: deploy
  image: instrumentisto/rsync-ssh:latest  # 使用SSH镜像
  script:
    - mkdir -p ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n" > ~/.ssh/config  # 关闭SSH主机密钥检查
    - echo "$TEST_SSH_PRIVATE_KEY" >> ~/.ssh/id_rsa  # 引用GitLab变量中的私钥
    - chmod 600 ~/.ssh/id_rsa
    - ssh -p 22 -i ~/.ssh/id_rsa root@"$TEST_SERVER" "cd $TEST_PROJECT_PATH && git pull && source .venv/bin/activate && pip install -r requirements.txt"  # 部署到测试环境

该配置实现了“构建→测试→部署”的流水线,通过artifacts实现构建产物传递,通过SSH实现远程部署。

2. Docker镜像构建与Kubernetes部署

deploy_docker_k8s:
  stage: deploy
  image: docker:latest
  services:
    - docker:dind  # 启用Docker-in-Docker
  script:
    - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin $DOCKER_REGISTRY  # 登录Docker Hub
    - docker build -t $DOCKER_REGISTRY/your_project:latest .  # 构建镜像
    - docker push $DOCKER_REGISTRY/your_project:latest  # 推送镜像
    - kubectl apply -f kubernetes/deployment.yaml  # 应用Kubernetes配置
  only:
    - main  # 仅main分支触发

该配置适用于容器化项目,实现了镜像构建、推送及Kubernetes滚动更新。

四、GitLab配置自动化管理工具(Ansible)

对于多台GitLab服务器的批量配置,可使用Ansible Playbook自动化完成安装与配置。以下是示例Playbook:

---
- name: Install and configure GitLab
  hosts: gitlab_servers
  become: yes
  vars:
    gitlab_version: "13.5.0-ce"
    gitlab_repo: "https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-{{ gitlab_version }}.ce.el7.x86_64.rpm"
    gitlab_key: "https://packages.gitlab.com/gpg.key"
  tasks:
    - name: Add GitLab repository
      yum_repository:
        name: gitlab-ce
        description: GitLab repository
        baseurl: "{{ gitlab_repo }}"
        gpgcheck: yes
        gpgkey: "{{ gitlab_key }}"
        enabled: yes
        update_cache: yes

    - name: Install GitLab
      yum:
        name: gitlab-ce-{{ gitlab_version }}.ce.el7.x86_64
        state: present
        disable_gpg_check: yes

    - name: Start GitLab service
      service:
        name: gitlab-runsvdir
        state: started
        enabled: yes

    - name: Configure GitLab external URL
      lineinfile:
        path: /etc/gitlab/gitlab.rb
        regexp: '^external_url'
        line: 'external_url "http://your-gitlab-url"'
        backup: yes

    - name: Reconfigure GitLab
      shell: gitlab-ctl reconfigure
      args:
        creates: /etc/gitlab/reconfigured

该Playbook实现了GitLab的仓库添加、安装、服务启动、外部URL配置及重配置,支持批量执行。

0