GitLab CI/CD 自动化部署入门
前言:因为找了B站内推,测试开发,正好知道内部使用GitLab做自动化测试,所以简单学了一下,有错误的地方请指正。
入门
初始化
-
cp: 无法获取'/root/node-v12.9.0-linux-x64' 的文件状态(stat): 权限不够
- 原因:源地址或目标地址有问题
-
E212:无法打开并写入文件
- 原因:权限不够;解决:从root权限终端打开
sudo su
- 原因:权限不够;解决:从root权限终端打开
-
安装启动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查看受否收到信件。