GitLab CI/CD 自动化部署入门

2022-12-09,,,,

前言:因为找了B站内推,测试开发,正好知道内部使用GitLab做自动化测试,所以简单学了一下,有错误的地方请指正。

入门

初始化

cp: 无法获取'/root/node-v12.9.0-linux-x64' 的文件状态(stat): 权限不够

原因:源地址或目标地址有问题

E212:无法打开并写入文件

原因:权限不够;解决:从root权限终端打开sudo su

安装启动Nginx:

# 启动
nginx
# 停止
nginx stop
# 安全退出
nginx -s quit
# 重新加载配置文件
nginx -s reload
# 查看nginx进程
ps aux|grep nginx

安装 GitLab

#下载包
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/xenial/gitlab-ce_12.1.4-ce.0_amd64.deb/download.deb
#本地
dpkg -i gitlab-ce_12.1.4-ce.0_amd64.deb
#修改配置
vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.10.123:XXXX(端口号)'
sudo gitlab-ctl reconfigure

常用命令

# 启动gitlab服务
sudo gitlab-ctl start
# gitlab服务停止
sudo gitlab-ctl stop
# 重启gitlab服务
sudo gitlab-ctl restart

推送命令

git init
git remote add origin http://192.168.195.131:1874/root/test_project.git
git add .
git commit -m "Initial commit"
git push -u origin master

配置 CI/CD

安装 gitlab-runner

# 下载
wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# 分配运行权限
chmod +x /usr/local/bin/gitlab-runner
# 创建用户
useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
# 安装
itlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
# 运行
gitlab-runner start

新建 runner

# 注册 runner
gitlab-runner register
# 输入 gitlab 的访问地址
http://192.168.26.139:1874
# 输入 runner token,把开 http://192.168.26.139:1874/admin/runners 页面查看
63AyFAthj7s7sNy3JDwu
# runner 描述,随便填
测试webpack-vue项目部署
# runner tag
webpack-vue-cicd
# 输入(选择) shell
shell

编写 .gitlab-ci.yml 文件

.gitlab-ci.yml 文件是存放在项目的根目录下的,要提交到gitlab上面,runner 会根据 .gitlab-ci.yml 编写的规则自动部署项目。

# 阶段
stages:
- build
- deploy
# 缓存 node_modules 减少打包时间,默认会清除 node_modules 和 dist
cache:
paths:
- node_modules/ # 拉取项目,打包
build:
stage: build # 阶段名称 对应,stages
tags: # runner 标签(注册runner时设置的,可在 admin->runner中查看)
- webpack-vue-cicd
script: # 脚本(执行的命令行)
- cd ${CI_PROJECT_DIR} # 拉取项目的根目录
- npm install # 安装依赖
- npm run build # 运行构建命令
only:
- main #拉取分支
artifacts: # 把 dist 的内容传递给下一个阶
paths:
- dist/ # 部署
deploy:
stage: deploy # 阶段名称 对应,stages
tags: # runner 标签(注册runner时设置的)
- webpack-vue-cicd
script: # 脚本(执行的命令行)
- rm -rf /www/wwwroot/webpack_vue_cicd/*
- cp -rf ${CI_PROJECT_DIR}/dist/* /www/wwwroot/webpack_vue_cicd/ # 把包完成,复制 dist 下的文件到对应的项目位置

更进一步

一旦你已经添加了.gitlab-ci.yml到仓库中,GitLab将检测到该文件,并使用名为GitLab Runner的工具运行你的脚本。该工具的操作与终端类似。

这些脚本被分组到jobs,它们共同组成一个pipeline。一个最简单的.gitlab-ci.yml文件可能是这样的:

1.before_script:
2. - apt-get install rubygems ruby-dev -y
3.
4.run-test:
5. script:
6. - ruby --version 6

before_script属性将在运行任何内容之前为你的应用安装依赖,一个名为run-test的job(作业)将打印当前系统的Ruby版本。二者共同构成了在每次推送到仓库的任何分支时都会被触发的pipeline(管道)。

GitLab CI/CD不仅可以执行你设置的job,还可以显示执行期间发生的情况,正如你在终端看到的那样:

一个简单的管道通常包括三个阶段:build、test、deploy

1、首先,定义.gitlab-ci.yml文件。在这个文件中就定义了要执行的job和命令

2、接着,将文件推送至远程仓库

3、最后,配置Runner,用于运行job

发件邮箱配置#

在pipline流程执行过程中,我们希望有任何风吹草动都能及时收到消息,邮件就是一个比较好的提醒方式。

vi /etc/gitlab/gitlab.rb

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxxx@yyyy.com"
gitlab_rails['smtp_password'] = "xxxxxxxx"
gitlab_rails['smtp_domain'] = "exmail.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true ### Email Settings gitlab_rails['gitlab_email_enabled'] = true ##! If your SMTP server does not like the default 'From: gitlab@gitlab.example.com'
##! can change the 'From' with this setting.
##! 要与上面的 smtp_user_name 保持一致
gitlab_rails['gitlab_email_from'] = 'xxxx@yyyy.com'
# gitlab_rails['gitlab_email_display_name'] = 'Example'
# gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'
# gitlab_rails['gitlab_email_subject_suffix'] = ''
# gitlab_rails['gitlab_email_smime_enabled'] = false
# gitlab_rails['gitlab_email_smime_key_file'] = '/etc/gitlab/ssl/gitlab_smime.key'
# gitlab_rails['gitlab_email_smime_cert_file'] = '/etc/gitlab/ssl/gitlab_smime.crt'
# gitlab_rails['gitlab_email_smime_ca_certs_file'] = '/etc/gitlab/ssl/gitlab_smime_cas.crt'

gitlab-ctl reconfigure使配置生效

测试

Copygitlab-rails console
irb(main):003:0> Notify.test_email('whatever@qq.com', 'Message Subject', 'Message Body').deliver_now

登录whatever@qq.com查看受否收到信件。

GitLab CI/CD 自动化部署入门的相关教程结束。

《GitLab CI/CD 自动化部署入门.doc》

下载本文的Word格式文档,以方便收藏与打印。