私有化部署gitlab
-
安装 Docker 和 Docker Compose(如果尚未安装)。
-
创建一个目录用于存储 GitLab 配置文件和数据
mkdir -p /srv/gitlab/config /srv/gitlab/data /srv/gitlab/logs
-创建并编辑 docker-compose.yml 文件version: '3' services: gitlab: image: 'gitlab/gitlab-ce:latest' restart: unless-stopped hostname: 'your-gitlab-domain.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'https://your-gitlab-domain.com' gitlab_rails['gitlab_shell_ssh_port'] = 30022 ports: - '443:443' - '80:80' - '30022:22' volumes: - '/srv/gitlab/config:/etc/gitlab' - '/srv/gitlab/logs:/var/log/gitlab' - '/srv/gitlab/data:/var/opt/gitlab'
-启动 GitLab 容器
docker-compose up -d
-
配置 GitLab Runner
在 GitLab 中,转到项目的 Settings -> CI/CD 页面,找到 Runners 部分。
获取 Runner 注册令牌。
在待执行 CI/CD 任务的服务器上安装并注册 GitLab Runner-v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest docker exec -it gitlab-runner gitlab-runner register # 使用注册令牌进行注册
-
重启 GitLab Runner 容器:
docker restart gitlab-runner
前端项目文件编写
- 根目录建立一个docker文件夹 包含docker-compose.yml 和nginx.conf文件
docker-compose.ymlversion: "3" services: react: image: ccr.ccs.tencentyun.com/huozhonglu/cicd:master ports: - 8080:80 deploy: mode: replicated replicas: 1 placement: constraints: [node.role == manager] restart_policy: condition: on-failure
nginx.conf
server { listen 80; server_name _; location / { root /usr/share/nginx/html; index index.html inde.htm; try_files $uri $uri/ /index.html =404; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
- 根目录新建.gitlab-ci.yml 和 Dockerfile文件
.gitlab-ci.ymldefault: # services: # - name: docker:dind # alias: docker # cache: # key: modules-cache # paths: # - node_modules # 设置变量 variables: # 镜像仓库地址 REGISTRY: ccr.ccs.tencentyun.com # 镜像版本 REGISTRY_IMAGE_TAG: ccr.ccs.tencentyun.com/huozhonglu/cicd:master stages: # - install - build - deploy # install: # image: node:latest # stage: install # script: # - npm i # only: # refs: # - main # changes: # - package.json # tags: # - test build: stage: build # before_script: # - echo "$DOCKER_REGISTRY_PASS" | docker login $DOCKER_REGISTRY --username $DOCKER_REGISTRY_USER --password-stdin script: - docker login -u 100028714879 -p '}!rW)Jh_5;daA3' $REGISTRY - docker build -t $REGISTRY_IMAGE_TAG . - docker push $REGISTRY_IMAGE_TAG # - npm run build # artifacts: # paths: # - ./build/ only: - main tags: - test deploy: stage: deploy script: # - echo "啥也不干" - docker login -u 100028714879 -p '}!rW)Jh_5;daA3' $REGISTRY - docker stack deploy -c ./docker/docker-compose.yml ${CI_PROJECT_NAME} --with-registry-auth - docker rm -v <code>docker ps -a -q -f status=exited</code> - docker rmi $(docker images -f "dangling=true" -q) only: - main tags: - test
Dockerfile
FROM node:latest as compile WORKDIR /usr/src/app/ COPY package.json ./ RUN npm i --registry=https://registry.npm.taobao.org COPY . . RUN npm run build FROM nginx COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf COPY --from=compile /usr/src/app/build /usr/share/nginx/html/ EXPOSE 8080 CMD ["nginx", "-g", "daemon off;"]
备注
我是使用腾讯云保存的镜像,而且在ci文件内部敏感信息不应该使用明文
配置腾讯云容器镜像服务:
登录腾讯云,进入容器镜像服务控制台。
创建一个新的镜像仓库,并记录下仓库地址和登录凭证。
配置 GitLab 项目:
进入你的 GitLab 项目设置页面。
在左侧导航栏中选择 "CI/CD",然后找到 "Variables" 部分。
添加以下环境变量(Variable):
TENCENT_CLOUD_USERNAME:你的腾讯云账号用户名。
TENCENT_CLOUD_PASSWORD:你的腾讯云账号密码。
TENCENT_CLOUD_REGISTRY:腾讯云容器镜像服务的仓库地址。