前端搭建CICD流程

article/2025/9/22 10:17:38

用Docker-compose 安装gitlab、gitlab-runner

源码地址 如果您觉得有用请STAR

安装docker

如果有已安装旧版docker需要先卸载

 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
复制代码

安装

yum install docker  #安装docker
systemctl start docker  #启动docker
systemctl enable docker  #开启启动复制代码

若是启动报错,需要重新安装:

启动报错,错误如下:
Failed to start docker.service: Unit docker.service not found.错误分析:CentOS 8 中安装 docker 和 Podman 冲突解决方式:1.查看是否安装 Podman 
rpm -q podman2.删除podman(输入yes,然后等待...)
dnf remove podman 3.重装docker(分别执行如下命令)yum install -y yum-utils  device-mapper-persistent-data  lvm2yum-config-manager  --add-repo   https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce docker-ce-cli containerd.ioyum install docker-ce docker-ce-cli docker-compose-plugin 复制代码

docker-compose-plugin 貌似就是docker-compose,这样也许不用单独安装python3了,也是在其他机器装docker时才发现。感兴趣的可以试试。

安装Python3(docker-compose需要python3)

wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
tar -zxvf Python-3.7.0.tgz
cd Python3.7.0 
./configure --prefix=/usr/local/python3 
make && make install#添加环境变量echo PATH='/usr/local/python/bin:$PATH' >> /etc/profile  # 将python安装路径追加到配置文件中source /etc/profile  # 让配置文件重载生效# 修改原有的python软连接名称mv /usr/bin/python /usr/bin/python2.7.5
# 建立python3的软连接ln -s /usr/local/python/bin/python3.7 /usr/bin/python
复制代码

遇到的问题

在安装python3.xx版本后,通过yum去安装软件会出现问题

 yum install -y epel-releaseFile"/usr/bin/yum", line 30except KeyboardInterrupt, e:^
SyntaxError: invalid syntax
复制代码

解决方式:

# vi /usr/bin/yum  
将第一行"#!/usr/bin/python" 改为 "#!/usr/bin/python2"复制代码

另一个问题:

File"/usr/libexec/urlgrabber-ext-down", line 28except OSError, e:^
SyntaxError: invalid syntax
复制代码

解决方式:

vi /usr/libexec/urlgrabber-ext-down  
将第一行"#!/usr/bin/python" 改为 "#!/usr/bin/python2"复制代码

安装Docker-compose

sudo yum install epel-release  #安装依赖
pip install --upgrade --force pip #更新一下pip,避免版本不对报错
sudo pip install docker-compose  #安装compose
docker-compose version  #查看版本信息复制代码

安装时,会有waring,说是在root用户下安装会导致包管理混乱,查了一下解决方式:通过安装Python3虚拟环境处理,解决过程中会有一系列依赖包报错。但想想安装虚拟环境,似乎就要在虚拟环境中装Docker-compose,有点不太对,于是直接忽略了警告信息,继续安装:

安装gitlab、gitlab-runner容器

在 /user/local/ 下新建目录 dockerCompsemkdir dockerCompsevim docker-compose.yml //新建文件

version: "3"
services:gitlab:image: 'gitlab/gitlab-ce:latest'container_name: GitLabrestart: alwaysenvironment:GITLAB_OMNIBUS_CONFIG: |external_url 'http://47.97.97.114:3143'gitlab_rails['gitlab_shell_ssh_port'] = 3122nginx['listen_port'] = 443nginx['redirect_http_to_https'] = truenginx['ssl_certificate'] = "/etc/ssl/certs/gitlab/server-cert.pem"nginx['ssl_certificate_key'] = "/etc/ssl/certs/gitlab/server-key.pem"registry_external_url 'http://47.97.97.114:4567'registry_nginx['enable'] = trueregistry_nginx['ssl_certificate'] = "/etc/ssl/certs/gitlab/server-cert.pem"registry_nginx['ssl_certificate_key'] = "/etc/ssl/certs/gitlab/server-key.pem"gitlab_rails['backup_keep_time'] = 172800ports:- '4567:4567'- '3143:443'- '3122:22'volumes:- '/srv/gitlab/config:/etc/gitlab'- '/srv/gitlab/logs:/var/log/gitlab'- '/srv/gitlab/ssl:/etc/ssl/certs/gitlab'- '/srv/gitlab/data:/var/opt/gitlab'networks:dev-net:aliases:- my.gitlabrunner:image: 'gitlab/gitlab-runner:latest'container_name: gitlab-runnerrestart: alwaysvolumes:- '/srv/gitlab-runner:/etc/gitlab-runner'- '/var/run/docker.sock:/var/run/docker.sock'networks:- dev-net
networks:dev-net:external:name: development
复制代码

按esc建,:wq,启动docker

docker-compose up如果提示没有development网络,按照提示执行命令即可。
复制代码

注册runner

docker exec -it gitlab-runner gitlab-runner register复制代码
Pleaseenterthegitlab-cicoordinatorURL (e.g. https://gitlab.com/):`http://47.97.97.114:3143/Please enter the gitlab-ci token for this runner:
# 登录这个地址: http://47.97.97.114:3143/admin/runners 右上角下拉按钮可以查看Please enter the gitlab-ci description for this runner:
[1297529a8a58]: Docker Runner
Please enter the gitlab-ci tags for this runner (comma separated):
docker
Registering runner... succeeded                     runner=RQ-XuZwP
Please enter the executor: docker-ssh, virtualbox, docker+machine, docker-ssh+machine, docker, parallels, shell, ssh, kubernetes:
docker
Please enter the default Docker image (e.g. ruby:2.1):
docker:stable
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 
复制代码

浏览器重新访问gitlab地址,应该可以看到runner已经注册,如果地址访问不成功,重启docker-compose

docker-compose down
docker-compose up
复制代码

打包前端镜像

安装 registry

此时修改docker-compose.yml

services:# 增加registryregistry:image: 'registry'container_name: registryrestart: alwaysports:- '4567:5000'volumes:- './registry:/var/lib/registry'gitlab:image: 'gitlab/gitlab-ce:latest'container_name: GitLabrestart: alwaysenvironment:GITLAB_OMNIBUS_CONFIG: |external_url 'http://47.97.97.114:3143'gitlab_rails['gitlab_shell_ssh_port'] = 3122nginx['listen_port'] = 443nginx['redirect_http_to_https'] = falseregistry_external_url 'http://47.97.97.114:4567'registry_nginx['enable'] = falsegitlab_rails['registry_api_url'] = "http://47.97.97.114:4567"gitlab_rails['registry_enabled'] = truegitlab_rails['backup_keep_time'] = 172800ports:- '3143:443'- '3122:22'volumes:- '/srv/gitlab/config:/etc/gitlab'- '/srv/gitlab/logs:/var/log/gitlab'- '/srv/gitlab/ssl:/etc/ssl/certs/gitlab'- '/srv/gitlab/data:/var/opt/gitlab'23,15%
复制代码

这里删掉了一部分https的配置,让配置文件简洁一些,删除了原有gitlab镜像中的端口'4567:4567',重启docker-compos

docker-compose down 
docker-compose up
复制代码

访问该地址:http://47.97.97.114:4567/v2/, 返回

说明registry启动成功,

配置socket binding , 让gitlab-runner 可以使用host主机的docker命令,构建镜像

vim /srv/gitlab-runner/config.toml
复制代码

重启docker-compose

docker-compose down 
docker-compose up
复制代码

在gitlab上增加变量Settings->CICD->Viriables:

CI_REGISTRY http://47.97.97.114:4567/

CI_REGISTRY_PASSWORD yourpassword

CI_REGISTRY_USER yourusername

这些变量可以在 gitlab-ci.yml上使用。

前端项目根目录下修改.gitlab-ci.yml,构建容器镜像并上传到gitlab的registry

image: docker:20.10.22  #注意版本是否有影响variables:GIT_SSL_NO_VERIFY: "1"
stages:- test- build
before_script:- export PACKAGE_VERSION=$(grep '"version":' package.json | cut -d\" -f4)- export NODE_ENV=production# building:#   image: node:10    # 指定运行环境#   stage: build          # 当前stage阶段为build#   tags:#     - docker#   script:               # build阶段运行的脚本#     - npm --registry=https://registry.npm.taobao.org install express#     - npm i#     - npm run  build#   artifacts:#     paths:#     - dist# cache:                  # 缓存#   paths:                # 路径#     - node_modules/     # 缓存node_mudules将大大提高ci运行的速度build-docker:stage: buildtags:- dockerscript:- echo$CI_REGISTRY_IMAGE- echo$CI_REGISTRY- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"$CI_REGISTRY- echo"docker build"- docker build -t $CI_REGISTRY_IMAGE:$PACKAGE_VERSION .- docker tag $CI_REGISTRY_IMAGE:$PACKAGE_VERSION$CI_REGISTRY_IMAGE- docker push $CI_REGISTRY_IMAGE:$PACKAGE_VERSION- docker push $CI_REGISTRY_IMAGE- docker image rm$CI_REGISTRY_IMAGE- docker image rm$CI_REGISTRY_IMAGE:$PACKAGE_VERSIONonly:- main复制代码

CI_REGISTRY_IMAGE 是gitlab CICD内置变量,可以直接使用。

docker tag CI_REGISTRY_IMAGE:version CI_REGISTRY_IMAGE,第二个tag名只传路径会默认为latest

docker 登录时http报错解决方式:

If the daemon.json file does not exist, create it. Assuming there are no other settings in the file, it should have the following contents:

{"insecure-registries":["http://myregistrydomain.com:xxxx"]}复制代码

然后重启docker:systemctl restart docker

打包生成镜像

前一个阶段已经可以成功使用 registry, 并且能使用docker命令打包,此时我们再来修改.gitlab-ci.yml 文件,stages增加build-docker,并且修改上一个阶段的artifacts。

image: docker:20.10.22variables:GIT_SSL_NO_VERIFY: "1"
stages:- test- build- build-docker  #这里很重要,和下面的state保持一致,不然没法使用artifacts
before_script:- export PACKAGE_VERSION=$(grep '"version":' package.json | cut -d\" -f4)- export NODE_ENV=productionbuilding:image: node:10    # 指定运行环境stage: build          # 当前stage阶段为buildtags:- dockerscript:               # build阶段运行的脚本- npm --registry=https://registry.npm.taobao.org install express- npm i- npm run  buildartifacts:paths:- dist              # 导出dist
cache:                  # 缓存paths:                # 路径- node_modules/     # 缓存node_mudules将大大提高ci运行的速度build-docker:stage: build-dockertags:- dockerscript:- ls- echo$CI_REGISTRY_IMAGE- echo$CI_REGISTRY- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"$CI_REGISTRY- echo"docker build"- docker build -t $CI_REGISTRY_IMAGE:$PACKAGE_VERSION .- docker tag $CI_REGISTRY_IMAGE:$PACKAGE_VERSION$CI_REGISTRY_IMAGE- docker push $CI_REGISTRY_IMAGE:$PACKAGE_VERSION- docker push $CI_REGISTRY_IMAGE- docker image rm$CI_REGISTRY_IMAGE- docker image rm$CI_REGISTRY_IMAGE:$PACKAGE_VERSIONonly:- main复制代码

再次提交到gitlab,此时应该会编译成功并且,上传镜像到gitlab

将打包镜像在onLine环境下发布

OnLine 环境只需安装docker即可,具体安装步骤和上面一样。

docker login -u "yourusername" -p "yourpassword" http://47.97.97.114:4567/  #登录registrydocker run --init -p 8000:80 -d 47.97.97.114:4567/klbest1/my-vue-app
# 运行镜像复制代码

-p 绑定端口号,-d 表示后台运行。如果是在云上环境,需要在安全组中开放8000端口,协议为tcp.

访问发布的地址:http:yourdomain:8000, 查看前端页面是否成功。


http://chatgpt.dhexx.cn/article/83ADlurt.shtml

相关文章

搭建CICD平台

** 搭建CICD平台 ** 1、主机准备。 2、安装前预配置。准备相应的系统配置与软件依赖。 3、执行安装。 4、安装后配置。添加相应的组件以及修改配置。如导入模板等。 一、主机准备 Centos7.2 配置:内存大于4G。(其中Jenkins占1.5G、Gitlab占2G&#xf…

什么是CICD

什么是CICD 一、简介二、持续集成(CI)三、持续交付(CD)四、持续部署(CD)五、下一步是什么? 一、简介 CI / CD的采用改变了开发人员和测试人员如何发布软件。 最初是瀑布模型,后来是…

CI/CD是什么

文章目录 前言CI/CD概念持续集成(Continuous integration,CI)持续交付(Continuous Delivery,CD)持续部署(Continuous Deployment,CD)CI/CD小结 CI/CD 工具CI/CD 配置文件…

CICD简介

简介 CICD 是 持续集成(Continuous Integration)持续交付和持续部署(Continuous Deployment)简称。指在开发过程中自动执行一系列从开发到部署的过程中,尽量减少人工的介入。 CI 持续集成 ​ 定义:频繁…

都在说CI/CD,到底什么是CI/CD

引入 这篇文章是自己工作多年对CI/CD的理解,纯属个人见解。 不想说太多概念性的东西,直接从技术人员实际能接触的过程来展开说说。另外我这篇只是想关注一些通用的流程,细节的不同这里不纠结。比如微服务的CI/CD和单体服务有些不同&#xf…

自动化运维CICD

目录 概述 为什么持续集成和发布可以提高效率 如何实现 1、在linux服务器安装部署代码仓库 2、安装jenkins 使用shell脚本实现CICD 使用pipeline实现CICD 使用Blue Ocean实现CICD 概述 持续集成(Continuous Integration,CI)和持续发布&#xff0…

什么是 CI/CD ?

说在开头 CI、CD 其实是三个概念,包含了一个 CI 和两个 CD,CI全称 Continuous Integration,表示持续集成,CD包含 Continuous Delivery和 Continuous Deployment,分别是持续交付和持续部署。这三个概念之间是有前后依赖…

【神经网络】一文读懂LSTM神经网络

简介 说到LSTM神经网络,大家都不陌生,LSTM指的是Long Short-Term Memory,意思是:长短时记忆,也就是说这个神经网络有记忆功能,为什么说它有记忆功能呢?因为在训练数据的时候,很久之前…

深度学习中的循环神经网络LSTM详解

(一)、什么是循环神经网络LSTM? LSTM指的是长短期记忆网络(Long Short Term Memory),它是循环神经网络中最知名和成功的扩展。由于循环神经网络有梯度消失和梯度爆炸的问题,学习能力有限,在实际任务中的效果…

【神经网络】学习笔记三—LSTM简介篇

1. RNN和LSTM结构对比 RNN: 循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。相比一般的神经网络来说,他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不…

深度学习-LSTM网络-代码-示例

一、 LSTM网络原理 要点介绍 (1)LSTM网络用来处理带“序列”(sequence)性质的数据,比如时间序列的数据,像每天的股价走势情况,机械振动信号的时域波形,以及类似于自然语言这种本身带有顺序性质的由有序单…

LSTM模型介绍

递归神经网络(RNN) 人类不会每时每刻都开始思考。 当你阅读这篇文章时,你会根据你对之前单词的理解来理解每个单词。 你不会忘掉掉所有东西,然后再从头开始思考。 你的想法有持久性。 传统的神经网络不能做到这一点,…

人人都能用Python写出LSTM-RNN的代码![你的神经网络学习最佳起步]

0. 前言 本文翻译自博客: iamtrask.github.io ,这次翻译已经获得trask本人的同意与支持,在此特别感谢trask。本文属于作者一边学习一边翻译的作品,所以在用词、理论方面难免会出现很多错误,假如您发现错误或者不合适…

LSTM神经网络算法

RNN RNN 是包含循环的网络,允许信息的持久化。 在下面的示例图中,神经网络的模块,A,正在读取某个输入 x_i,并输出一个值 h_i。循环可以使得信息可以从当前步传递到下一步。 RNN 可以被看做是同一神经网络的多次复制&…

Understanding LSTM Networks(LSTM的网络结构)

Recurrent Neural Networks 人类不是每时每刻都从头开始思考的。当你读这篇文章的时候,你理解每个单词是基于你对以前单词的理解。你不会把所有的东西都扔掉,然后从头开始思考。你的思想有毅力。传统的神经网络无法做到这一点,这似乎是一个主…

理解 LSTM 网络

递归神经网络人类并不是每时每刻都从头开始思考。正如你阅读这篇文章的时候,你是在理解前面词语的基础上来理解每个词。你不会丢弃所有已知的信息而从头开始思考。你的思想具有持续性。传统的神经网络不能做到这点,而且这似乎也是它的主要缺陷。比如&…

LSTM网络的简单理解

目录 RNN递归神经网络LSTM神经网络结构变形1.peephole connections结构2.在忘记门与输入门之间引入一个耦合3.门循环单元(GRU) 今天对LSTM网络进行学习。 在理解LSTM网络之前,我们首先要对Recurrent Neural Networks(RNNs&#xf…

循环神经网络与LSTM

1. 循环神经网络 ①基本结构 在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么&am…

实例 :教你使用简单神经网络和LSTM进行时间序列预测(附代码)

翻译:张玲 校对:丁楠雅 本文约1500字,建议阅读5分钟。 作者基于波动性标准普尔500数据集和Keras深度学习网络框架,利用python代码演示RNN和LSTM RNN的构建过程,便于你快速搭建时间序列的预测模型。 图片来源&#xff…

【LSTM】深入浅出讲解长短时记忆神经网络(结构、原理)

本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!​​个人主页:有梦想的程序星空​​个人介绍:小编是人工智能领域硕士,全栈…