OpenEuler安装gitlab,CI/CD实现nginx版本自增

一、安装gitlab

1.查看OpenEuler版本,openEuler 25.03

[root@gitlab1 ~]# cat /etc/os-release 
NAME="openEuler"
VERSION="25.03"
ID="openEuler"
VERSION_ID="25.03"
PRETTY_NAME="openEuler 25.03"
ANSI_COLOR="0;31"

2.安装基础环境

sudo yum update -y
sudo yum install -y curl policycoreutils-python-utils openssh-server perl wget

3.下载gitlab安装包, RPM 包

curl -LOS https://packages.gitlab.cn/repository/el/8/gitlab-jh-17.7.0-jh.0.el8.x86_64.rpm

4.安装并配置

[root@gitlab1 soft]# export EXTERNAL_URL="http://172.16.50.23"
[root@gitlab1 soft]# sudo rpm -ivh gitlab-jh-*.rpm
警告:gitlab-jh-17.7.0-jh.0.el8.x86_64.rpm: 头 V4 DSA/SHA256 Signature, 密钥 ID 319ec913: NOKEY
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:gitlab-jh-17.7.0-jh.0.el8        ################################# [100%]
It looks like JiHu GitLab has not been configured yet; skipping the upgrade script.

                  *.                  *.
                 ***                 ***
                *****               *****
               .******             *******
               ********            ********
              ,,,,,,,,,***********,,,,,,,,,
             ,,,,,,,,,,,*********,,,,,,,,,,,
             .,,,,,,,,,,,*******,,,,,,,,,,,,
                 ,,,,,,,,,*****,,,,,,,,,.
                    ,,,,,,,****,,,,,,
                       .,,,***,,,,
                           ,*,.
  


         ___ __  __         _______ __  __          __
        / (_) / / /_  __   / ____(_) /_/ /   ____ _/ /_
   __  / / / /_/ / / / /  / / __/ / __/ /   / __ `/ __ \
  / /_/ / / __  / /_/ /  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/_/ /_/\__,_/   \____/_/\__/_____/\__,_/_.___/
  

Thank you for installing JiHu GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your JiHu GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your JiHu GitLab instance by running the following command:
  sudo gitlab-ctl reconfigure

For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://jihulab.com/gitlab-cn/omnibus-gitlab/-/blob/main-jh/README.md

Help us improve the installation experience, let us know how we did with a 1 minute survey:
https://wj.qq.com/s2/10068464/dc66

5.修改配置文件

vim /etc/gitlab/gitlab.rb
external_url 'http://172.16.50.23' 
nginx['listen_port'] = 80 
gitlab_rails['time_zone'] = 'Asia/Shanghai'  

原文件

external_url 'http://172.16.50.23' 默认不注释
nginx['listen_port'] = 80 默认注释
gitlab_rails['time_zone'] = 'Asia/Shanghai'  默认注释

6.启动gitlab

sudo gitlab-ctl reconfigure # 初始化配置(耗时较长,可能10几分钟)最后输出下面这段

Notes:
Default admin account has been configured with following details:
Username: root
Password: You didn't opt-in to print initial root password to STDOUT.
Password stored to /etc/gitlab/initial_root_password. This file will be cleaned up in first reconfigure run after 24 hours.

NOTE: Because these credentials might be present in your log files in plain text, it is highly recommended to reset the password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

gitlab Reconfigured!

启动gitlab

sudo gitlab-ctl start

sudo gitlab-ctl status

[root@gitlab1 soft]# sudo gitlab-ctl start
\ok: run: alertmanager: (pid 12908) 108s
ok: run: gitaly: (pid 12835) 111s
ok: run: gitlab-exporter: (pid 12854) 110s
ok: run: gitlab-kas: (pid 11514) 346s
ok: run: gitlab-workhorse: (pid 12759) 112s
ok: run: logrotate: (pid 11102) 380s
ok: run: nginx: (pid 12791) 111s
ok: run: node-exporter: (pid 12844) 111s
ok: run: postgres-exporter: (pid 12926) 107s
ok: run: postgresql: (pid 11318) 357s
ok: run: prometheus: (pid 12865) 109s
ok: run: puma: (pid 11623) 224s
ok: run: redis: (pid 11148) 374s
ok: run: redis-exporter: (pid 12856) 110s
ok: run: sidekiq: (pid 11650) 218s
[root@gitlab1 soft]# ^C
[root@gitlab1 soft]# sudo gitlab-ctl status
run: alertmanager: (pid 12908) 116s; run: log: (pid 12082) 181s
run: gitaly: (pid 12835) 119s; run: log: (pid 11254) 373s
run: gitlab-exporter: (pid 12854) 118s; run: log: (pid 11924) 199s
run: gitlab-kas: (pid 11514) 354s; run: log: (pid 11556) 350s
run: gitlab-workhorse: (pid 12759) 120s; run: log: (pid 11764) 218s
run: logrotate: (pid 11102) 388s; run: log: (pid 11110) 387s
run: nginx: (pid 12791) 119s; run: log: (pid 11822) 213s
run: node-exporter: (pid 12844) 119s; run: log: (pid 11887) 205s
run: postgres-exporter: (pid 12926) 115s; run: log: (pid 12116) 177s
run: postgresql: (pid 11318) 365s; run: log: (pid 11339) 361s
run: prometheus: (pid 12865) 117s; run: log: (pid 12015) 187s
run: puma: (pid 11623) 232s; run: log: (pid 11634) 229s
run: redis: (pid 11148) 382s; run: log: (pid 11168) 379s
run: redis-exporter: (pid 12856) 118s; run: log: (pid 11961) 195s
run: sidekiq: (pid 11650) 226s; run: log: (pid 11658) 225s
[root@gitlab1 soft]#

本机测试启动curl http://172.16.50.23

[root@gitlab1 soft]# curl http://172.16.50.23
<html><body>You are being <a href="http://172.16.50.23/users/sign_in">redirected</a>.</body></html>

防火墙开通

sudo firewall-cmd --permanent --add-port={80,443}/tcp
sudo firewall-cmd --reload

查看登录密码cat /etc/gitlab/initial_root_password

登录http://172.16.50.23,账号root

登录进来是这样的,我的已经设置为中文版了,默认英文版

二、安装部署docker

设置源

sudo tee /etc/yum.repos.d/docker-ce.repo <<-'EOF'
[docker-ce-stable]
name=Docker CE Stable
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg
EOF

sudo dnf install -y docker-ce docker-ce-cli containerd.io

sudo systemctl start docker

sudo systemctl enbale docker

docker --version

三、下载部署runner

wget https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64.rpm

下载依赖库

sudo yum install -y curl git-core wget tar openssl shim-unsigned-x64

安装sudo rpm -ivh --nodeps gitlab-runner_amd64.rpm

[root@gitlab1 soft]# sudo rpm -ivh --nodeps gitlab-runner_amd64.rpm
警告:gitlab-runner_amd64.rpm: 头 V4 RSA/SHA512 Signature, 密钥 ID 6ba75a4e: NOKEY
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:gitlab-runner-18.1.0-1           ################################# [100%]
GitLab Runner: creating gitlab-runner...
Home directory skeleton not used
Runtime platform                                    arch=amd64 os=linux pid=21350 revision=0731d300 version=18.1.0
gitlab-runner: the service is not installed
Runtime platform                                    arch=amd64 os=linux pid=21371 revision=0731d300 version=18.1.0
gitlab-ci-multi-runner: the service is not installed
Runtime platform                                    arch=amd64 os=linux pid=21436 revision=0731d300 version=18.1.0
Runtime platform                                    arch=amd64 os=linux pid=21518 revision=0731d300 version=18.1.0
INFO: Docker installation not found, skipping clear-docker-cache
[root@gitlab1 soft]#

手动创建 systemd 服务文件​

sudo tee /usr/lib/systemd/system/gitlab-runner.service > /dev/null <<'EOF'
[Unit]
Description=GitLab Runner
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog
ExecReload=/usr/bin/gitlab-runner restart
ExecStop=/usr/bin/gitlab-runner stop
User=gitlab-runner
Group=gitlab-runner
Restart=always

[Install]
WantedBy=multi-user.target
EOF

创建用户及授权

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo mkdir -p /home/gitlab-runner
sudo chown -R gitlab-runner:gitlab-runner /home/gitlab-runner /etc/gitlab-runner

启动服务

sudo systemctl daemon-reload

sudo systemctl enable --now gitlab-runner

sudo systemctl status gitlab-runner

获取gitlab-runner的token

项目-设置-ci/cd-runner-复制

服务器注册 Runner,需修改ip,token

sudo gitlab-runner register \
  --non-interactive \
  --url "http://172.16.50.23" \
  --registration-token "GR1348941whg1S7GddDQUsat9z2by" \
  --executor "docker" \
  --docker-image "alpine:latest" \
  --docker-volumes "/var/run/docker.sock:/var/run/docker.sock" \
  --docker-privileged \
  --description "Docker Runner" \
  --tag-list "docker,prod" \
  --run-untagged "false"

验证,测试

[root@gitlab1 soft]# sudo gitlab-runner list
Runtime platform                                    arch=amd64 os=linux pid=28350 revision=0731d300 version=18.1.0
Listing configured runners                          ConfigFile=/etc/gitlab-runner/config.toml
Docker Runner                                       Executor=docker Token=t3_hw7kcnLUpxKyHtU4K5w4 URL=http://172.16.50.23
[root@gitlab1 soft]# sudo gitlab-runner verify
Runtime platform                                    arch=amd64 os=linux pid=28372 revision=0731d300 version=18.1.0
Running in system-mode.                            
                                                   
Verifying runner... is alive                        correlation_id=01JY659T9Q9B7FQHGH31AXX1Y7 runner=t3_hw7kc
[root@gitlab1 soft]#

四、构建CI/CD

1.构建新分支

2.创建2个文件,index.html,Dockerfile

index.html

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to 666666666</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
jkjkjhkhjk

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>

Dockerfile
 

# 使用动态基础镜像版本(可选)
ARG BASE_IMAGE=nginx:1.27.5
FROM ${BASE_IMAGE}

# 复制自定义内容
COPY index.html /usr/share/nginx/html

# 暴露端口
EXPOSE 80

# 添加版本元数据(便于追踪)
ARG NEW_VERSION
LABEL org.opencontainers.image.version="${NEW_VERSION}"

添加流水线编辑器,里面含有harbor地址,账号密码,需修改

stages:
  - get_version  # 获取当前最新版本
  - build       # 构建新版本镜像
  - deploy      # 部署新版本

variables:
  HARBOR_URL: "harbor.i.cdtig.com"
  PROJECT: "gxq"
  REPO: "nginx"
  HARBOR_USER: "admin"
  HARBOR_PASSWORD: "123456"
  # 敏感变量在GitLab CI/CD设置中配置(Settings > CI/CD > Variables):
  # HARBOR_USER, HARBOR_PASSWORD (勾选Masked和Protected)

# 阶段1:获取当前最新镜像版本
get_image_version:
  stage: get_version
  image: alpine:latest
  script:
    - apk add --no-cache curl jq
    - |
      # 获取最新版本并排序(取最高版本)
      CURRENT_TAG=$(curl -s -u "${HARBOR_USER}:${HARBOR_PASSWORD}" \
        "${HARBOR_URL}/api/v2.0/projects/${PROJECT}/repositories/${REPO}/artifacts" \
        | jq -r '.[].tags[].name' | sort -V | tail -1)
      
      # 若无版本则初始化为v0.0.0
      if [ -z "$CURRENT_TAG" ]; then
        CURRENT_TAG="v0.0.0"
      fi
      
      echo "当前最新版本: $CURRENT_TAG"
      echo "CURRENT_VERSION=$CURRENT_TAG" > variables.env
  artifacts:
    reports:
      dotenv: variables.env  # 传递变量到后续阶段[8](@ref)

# 阶段2:生成新版本并构建镜像
build_new_image:
  stage: build
  image: docker:20.10.24  # 包含Docker CLI
  services:
    - docker:dind  # 启用Docker-in-Docker
  script:
    - |
      # 版本号递增逻辑(v1.02 → v1.03)
      version=${CURRENT_VERSION#v}          # 去掉v前缀 → "1.02"
      major=${version%.*}                   # 主版本 → "1"
      minor=${version##*.}                  # 次版本 → "02"
      new_minor=$(printf "%02d" $((10#$minor + 1))) # 次版本+1 → "03"
      NEW_VERSION="v${major}.${new_minor}"  # 新版本 → "v1.03"
      
      echo "生成新版本: $NEW_VERSION"
      
      # 登录Harbor
      echo "$HARBOR_PASSWORD" | docker login -u $HARBOR_USER --password-stdin $HARBOR_URL
      echo "登录成功"
      # 构建镜像(含新版本标签)
      docker build -t $HARBOR_URL/$PROJECT/$REPO:$NEW_VERSION .
      echo "构建成功"
      # 推送镜像到Harbor
      docker push $HARBOR_URL/$PROJECT/$REPO:$NEW_VERSION
      echo "推送成功"
      # 存储新版本变量
      echo "NEW_VERSION=$NEW_VERSION" > new_version.env
  artifacts:
    reports:
      dotenv: new_version.env  # 传递新版本到部署阶段[8](@ref)
  needs: ["get_image_version"]  # 依赖上一阶段

# 阶段3:部署新版本镜像
deploy_new_image:
  stage: deploy
  image: docker:20.10.24  # 包含 Docker CLI
  services:
    - docker:dind        # 启用 Docker 守护进程
  script:
    - docker stop my-nginx || true
    - docker rm my-nginx || true
    - echo "正在部署 $REPO:$NEW_VERSION"
    - docker run -d -p 8081:80 --name my-nginx --cpus 2 --memory 1g -e NGINX_WORKER_PROCESSES=2 $HARBOR_URL/$PROJECT/$REPO:$NEW_VERSION
    - echo "容器启动成功"

流水线运行状态查看,我测试了几遍才成功

服务器docker ps容器运行查看

[root@gitlab1 soft]# docker ps
CONTAINER ID   IMAGE                                COMMAND                   CREATED          STATUS          PORTS                                   NAMES
e4e8d9f8bb76   harbor.i.cdtig.com/gxq/nginx:v1.04   "/docker-entrypoint.…"   13 minutes ago   Up 13 minutes   0.0.0.0:8081->80/tcp, :::8081->80/tcp   my-nginx

nginx页面查看

以后修改nginx的index.html,会在harbor仓库里面进行版本自增,并运行新的版本

我现在nginx最新版本v1.04

现在更改流水线的index.html

更改之后,流水线会自动运行,生成新的nginx版本v1.05,并且运行

流水线运行情况查看

harbor查看nginx版本

服务器docker运行查看


[root@gitlab1 soft]# docker ps
CONTAINER ID   IMAGE                                COMMAND                   CREATED              STATUS              PORTS                                   NAMES
b0988d2e0837   harbor.i.cdtig.com/gxq/nginx:v1.05   "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8081->80/tcp, :::8081->80/tcp   my-nginx

web页面查看,已经换了

现在,gitlab实现nginx版本自增,大功告成!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值