docker+gitlab+cicd

安装docker

服务器:linux centeros7.8 64位
防火墙设置:
关闭:systemctl stop firewalld
设置不启动:systemctl disable firewalld
安装docker:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
在这里插入图片描述
查看安装结果:docker version
在这里插入图片描述
查看docker服务状态:systemctl status docker
在这里插入图片描述

启动docker服务:systemctl start docker
重启docker:systemctl restart docker
关闭docker:systemctl stop docker
设置开机启动:systemctl enable docker
取消开机启动:systemctl disable docker

配置镜像:

#创建目录
mkdir -p /etc/docker
#配置配置文件
tee /etc/docker/daemon.json <<-'EOF'
{
	"registry-mirrors":["https://bqa5nxo4.mirror.aliyuncs.com"]
}
EOF
#查看文件
cat /etc/docker/daemon.json
#重启服务
systemctl daemon-reload
systemctl restart docker

搜索centos镜像:docker search centos
拉取镜像:docker pull centos
查看镜像:docker images
删除镜像:docker rmi ID //ID取对应的IMAGE ID前三位,当镜像中存在容器在使用中,删除会报错
查看运行中的容器:docker ps //加上-a即可查看所有容器状态
停止容器运行:docker stop ID //ID取对应的CONTAINER ID前三位
删除容器:docker rm ID 这之后再删除镜像即可
暴力删除,在删除的指令中加-f即可 docker rmi -f ID,镜像和容器同理

在docker中部署gitlab

拉取最新gitlab中文社区版:docker pull beginor/gitlab-ce:latest
把文件映射到容器外,添加相关目录方便管理:

//etc(配置)、log(日志)、data(数据)
mkdir -p /usr/local/gitlab/etc
mkdir -p /usr/local/gitlab/log
mkdir -p /usr/local/gitlab/data

给目录添加权限(可做可不做)777是用户

chmod 777 /usr/local/gitlab/etc 
chmod 777 /usr/local/gitlab/log 
chmod 777 /usr/local/gitlab/data

启动镜像

docker run --detach \  
--hostname 域名 \  #可写可不写
--publish 443:443 --publish 80:80 --publish 222:22 \  #端口映射外部端口(宿主机端口:容器端口)
--name gitlab \  #容器名称
--restart always \  #重启策略
--volume /usr/local/gitlab/etc:/etc/gitlab \  #挂载目录
--volume /usr/local/gitlab/log:/var/log/gitlab \
--volume /usr/local/gitlab/data:/var/opt/gitlab \
beginor/gitlab-ce:latest

执行后会返回容器一串字符串就是执行成功了

在阿里云服务器开放对应的端口后,打开浏览器访问http:// + 服务器ip + : 8888,配置了域名则域名访问
参考:https://developer.aliyun.com/article/929566#:~:text=%E2%91%A0%20%E6%8B%89%E5%8F%96%E6%9C%80%E6%96%B0%E7%9A%84%20Gitlab%20%E4%B8%AD%E6%96%87%E7%A4%BE%E5%8C%BA%E7%89%88%20docker%20pull%20beginor%2Fgitlab-ce%3Alatest%20%E2%91%A1,%E3%80%81log%20%28%E6%97%A5%E5%BF%97%29%20%E3%80%81data%20%28%E6%95%B0%E6%8D%AE%29.%20%EF%BC%88%E6%8A%8A%E6%96%87%E4%BB%B6%E6%98%A0%E5%B0%84%E5%88%B0%E5%AE%B9%E5%99%A8%E5%A4%96%EF%BC%8C%E4%BE%BF%E4%BA%8E%E4%B9%8B%E5%90%8E%E7%AE%A1%E7%90%86%E5%92%8C%E5%8D%87%E7%BA%A7%EF%BC%89%20mkdir%20-p%20%2Fusr%2Flocal%2Fgitlab%2Fetc

2核2g服务器下,运行起来内存直接爆满无法打开页面解决

在映射的配置文件目录中找到:/usr/local/gitlab/etc/gitlab.rb文件
修改其中的注释代码:

取消对应的#号
//减少数据库缓存(默认为256MB 我改为64MB了)
postgresql['shared_buffers'] = "64MB"
//减少数据库并发数(默认为8 我改为1了)
postgresql['max_worker_processes'] = 1
//减少sidekiq并发数(默认25,改为12)
sidekiq['concurrency'] = 12

创建swap分区:

# 增加1GB大小,其中的count等于想要的块的数量(bs*count=文件大小)
dd if=/dev/zero of=/root/swapfile bs=1M count=1024
# 修改权限
chmod 600 /root/swapfile
# 建立swap文件系统
mkswap /root/swapfile
# 启用交换分区文件
swapon /root/swapfile
# 查看分区
swapon --show
# 关闭或开启
swapoff -a && swapon -a

在文件/etc/fstab中添加一行设置开机时自启用: /root/swapfile swap swap defaults 0 0
配置分区和内存的权重,在/etc/sysctl.conf 文件中加入:vm.swappiness=50,表示在内存使用率超过50%时开始使用交换分区,可以先通过cat /proc/sys/vm/swappiness查看当前是多少

接下来就能访问了:
在这里插入图片描述
直接设置密码,账户默认root,后面创建自己的项目上传代码即可

这里可能会遇到,项目clone或者上传代码,ip地址是一串数字乱码,导致拉取或上传都失败
咱们来到服务器之前配置映射的外部文件夹/usr/local/gitlab/etc找到gitlab.rb文件,添加一句:external_url ‘http://自己服务器ip’,之后重启容器

这之后就能在页面中正确看到ip地址,然后上传自己的代码就好
提交代码也可能遇见: Failed to connect to 121.**.106.177 port 80 after 21005 ms: Couldn’t connect to server报错
这个情况就修改清除电脑上git的代理设置,或者设置代理

#清除代理
git config --global --unset http.proxy
git config --global --unset https.proxy
#设置代理
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

如果配置完这个传代码还是报错,如果是启动镜像那一步设置了容器端口映射到主机的端口不一致,则需要在服务器修改配置,参考链接:https://blog.csdn.net/qq_37344058/article/details/137372755

gitlab runner安装

搜索镜像,选择想要安装的镜像:docker search gitlab-runner
拉取镜像:docker pull gitlab/gitlab-runner
启动镜像:

docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest

返回一串密钥id则为启动成功,接下来进行gitlab-runner与gitlab联动的配置

在自己的gitlab网址中找到一个扳手图标,在菜单中进入Runners页面,里面有个注册令牌,就是联动时候需要设置的token
在这里插入图片描述

注册一个配置文件指定到你的gitlab,如下:

docker run --rm -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register --non-interactive --executor "docker" --docker-image alpine:latest --url "http://121.41.106.177/" --registration-token "R4Ji6byNSQAWpUGLPdpy" --description "cicd-runner-test" --tag-list "test-cicd,build-cicd" --run-untagged="true" --locked="false" --access-level="not_protected"

可以注册多个runner,其中:
–url和–registration-token为上图中数字3位置的值,这两个参数至关重要
–description设置的是名字,
–tag-list为tag标签多个以逗号隔开,在gitlab设置yml文件时这个tag设置要一一对应,所以这个也至关重要
–executor设置的是执行器,这里使用的docker也可以使用shell,或者还有其他的

在执行完后,Runners页面就能看到了
在这里插入图片描述

之后来到项目中,在自己项目根目录添加一个.gitlab-ci.yml文件,在yml文件中添加以下简单的代码进行调试

stages:
    - test
    - build
job:test:
    stage: test
    tags:
        - test-cicd
    script: 
        - echo 'test ci/cd'
    retry: 2
job:build:
    stage: build
    tags:
        - build-cicd
    script: 
        - echo 'build ci/cd'

stages:全局自定义阶段,声明job中stage的名称,以及执行顺序
stage:全局中声明的阶段名称,如果没有stages,则job中不写stage
tags:指定执行的Runner,在该项目可用的runner tags中选择
script:让runner执行的shell脚本
retry:当任务运行失败时重新运行的次数,最多3

retry:
	max: 2
	when:
		- runner_system_failure #如果有运行器系统故障(例如,作业设置失败)
		- stuck_or_timeout_failure #当作业卡住或超时时停止
# 当声明了when时,表示只有在when中的错误才会重试运行,其他错误不会重试运行

image:指定一个基础docker镜像作为基础运行环境,常用 node、java、python、docker
only:指定当前任务执行的条件,例如:

job_build:
	stage: build
	tags:
		- build-cicd
	script:
		- npm run build
	only:
		- master
# 只在master分支进行打包

cache:缓存

when:设置该任务什么时候执行

下面以前端项目为例:

image: node:18.16.1

stages:
	- install
	- build
	- deplot
# 配置缓存,因为在打包之前移除了某些文件,先将这些文件缓存下来
# 不然会导致打包运行报错,如下面的图片所示,这个缓存可以写在全局,也可以写在某个任务里	
cache:
	key: hello-vue-cache
	paths: 
		- node_modules/
		- package-lock.json
# 执行npm install安装依赖
job_install:
	stage: install
	tags:
		- build-cicd
	script:
		- npm install
# 执行npm run build打包项目
job_build:
	stage: build
	tags:
		- build-cicd
	script:
		- npm run build
	only:
		- master
# 打印666	
job_deplot:
	stage: deplot
	tags:
		- build-cicd
	script:
		- echo '666'

在这里插入图片描述

部署项目的脚本编写:

#修改上面的job_deplot任务
job_deplot:
	stage: deplot
	image: docker
	tags:
		- build-cicd
	script:
		# 使用docker打包一个名为testcicd的镜像
		- docker build -t testcicd .
		# 判断,如果存在这个容器,则移除
		- if [ $(docker ps -aq --filter name=my-testcicd) ]; then docker rm -f my-testcicd;fi
		# 运行testcicd镜像,并命名容器my-testcicd
		- docker run -d -p 8082:80 --name my-testcicd testcicd

项目根目录添加Dockerfile文件

FROM node:18.16.1 as builder
WORKDIR /app
COPY package.json .
RUN npm install --registry=http://registry.npmmirror.com/
COPY . .
RUN npm run build

FROM nginx:latest
COPY --from=builder /app/dist /usr/share/nginx/html

在服务器找到/srv/gitlab-runner/config/config.toml文件
在文件中对应用到的runners下的volumes数组中添加这两个"/usr/bin/docker:/usr/bin/docker",“/var/run/docker.sock:/var/run/docker.sock”,不然流水线执行会报错的

这之后界面访问http://ip地址:8082,就能看到页面了,该部署方式属于docker in docker,到这就完成了简单的自动化部署

如果不使用docker,可以使用shell脚本,将gitlab runner部署在nginx项目的服务器上

该笔记来自我学习b站大佬的教程所写,https://www.bilibili.com/video/BV1sK4y1d7ej/?p=5&spm_id_from=pageDriver,第一次学习部署服务器,服务器是阿里云新人免费体验的,感谢大佬的教程

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值