GitLab CI/CD 自动部署构建
2020/3/20 11:31:27
本文主要是介绍GitLab CI/CD 自动部署构建,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、背景
每次改完需求之后,更新到测试服务器都需要手动打包,并上传到服务器,多次人工干预操作,目前就有这样一个现成的基于 GitLab CI
工具,让我们提交或者合并代码后,就自动帮我们执行一段任务(打包、压缩、上传服务器)。从而实现自动上线。这里记录一下简单的步骤,因为每个人安装会面对不同的问题,后期有值得总结的,再补充。
二、Git Runner 介绍
是什么
它是我们自动构建的主服务
Runner 是一个执行任务的进程。可以根据需要配置任意数量的 Runner。 Runner 可以放在不同的用户、服务器,甚至 本地机器上。
怎么配
它实际就是 .gitlab-ci.yml
,写一下然后交给 Git Runner
去执行。
怎么安装 Runner
先安装 Docker
强调的是配置ali服务器 Docker 源
- 购买ali服务器会默认给你分配一个 Docker 源,这样拽 Docker 镜像会比较快。
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://[你的私有key].mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker 复制代码
三、安装配置 Git Runner
1、拉取 gitlab-runner 镜像
docker 镜像加速器配置好,这块会快一些,没配置的可能会慢一点
Git Runner
它是辅助 Git
构建的一个服务
docker pull gitlab/gitlab-runner 复制代码
安装好之后可以 docker images
测试查看
2、创建容器并启动
docker run -d --name gitlab-runner --restart always \ -v ~/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest 复制代码
现在 gitlab-runner
就启动了,可以通过 docker ps
查看,
3、注册 gitlab-runner
这里容器ID是上一步执行的返回的 ID,只去前几位就行。不用复制完。
docker exec -it [容器ID] gitlab-runner register 复制代码
上面命令执行中会让你一次让你输入 gitlab URL、token、runner-server、tag、docker、docker:stable
2.1、填写 Gitlab URL
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): 复制代码
2.2、填写 token
Please enter the gitlab-ci token for this runner: 复制代码
2.3、runner 描述信息
这里起了 runner-server
Please enter the gitlab-ci description for this runner: [ec66aa43edf6]: runner-server 复制代码
2.4、填写 tag 名字
一个 git 仓库可以对应多个 runnder, 执行 yml 文件可以指定某一个 runner , 所以需要起一个名字标识
Please enter the gitlab-ci tags for this runner (comma separated): 复制代码
2.5、执行器选择 docker
Please enter the executor: docker-ssh, parallels, virtualbox, docker-ssh+machine, custom, docker, shell, ssh, docker+machine, kubernetes: docker 复制代码
2.6、Docker img
这里输入 docker:stable
Please enter the default Docker image (e.g. ruby:2.6): docker:stable 复制代码
这几个值怎么找,登陆你的 gitlab -> 设置 -> CI/CD -> Runner 展开
找到 gitlab URL、token
到这里runner
配置成功
配置成功之后,将会在页面中看到 此项目已激活的运行器
四、yml 配置
我们需要创建一个 .gitlab-ci.yml
文件,一下有一个例子
例子
# 使用哪个镜像构建 image: node # 阶段 stages: - install - build - zip - deploy # 每一步骤都需要拉取新的镜像,cache 缓存做一个保留 cache: paths: - node_modules/ - dist/ - front-end-caiwu.tar # 执行所有 script 之前都会执行的 script 钩子 before_script: - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y ) ' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY_DEV") # 因为在 node 镜像中执行,若是选择执行器 是 shell 此步会干掉宿主机的ssh - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' install: stage: install tags: - tagcicd script: - npm install -g cnpm --registry=https://registry.npm.taobao.org - cnpm install build: stage: build script: - npm run build zip: stage: zip script: - tar -czvf front-end-caiwu.tar ./dist deploy: stage: deploy script: - scp ./front-end-caiwu.tar root@XXXXXXXX:/data 复制代码
默认 tags
上面 yml 配置没有指名 tags, 可配置一个默认的
变量配置
- 需要注意 $SSH_PRIVATE_KEY_DEV 是变量,需要在下图中配置 值是 value 需要配置一下
$SSH_PRIVATE_KEY_DEV value 生成
这一步很容易出现问题,网上版本也多,解决方案也不一样。一下可参考,但不保证按照步骤来就没问题。
1、首先,在任何一台服务器上称A,创建 RSA 无密码的密钥:
ssh-keygen -t rsa -P '' cat /root/.ssh/id_rsa 复制代码
2、特别注意需要复制完整包含 --- 复制到上图中 value里面
-----BEGIN RSA PRIVATE KEY----- xxxxxxx -----END RSA PRIVATE KEY----- 复制代码
3、然后在 A 服务器,执行代码 ssh-copy-id root 你需要部署的服务器 B, 期间会让你输入一次密码,后期就不会在输入。
# RSA 密钥对应的公钥,上传到需要连接到的服务器 ssh-copy-id root@你的服务器地址 # 测试 ssh root@你的服务器地址 复制代码
五、自动运行
当你push 代码的时候,会自动生成一条流水线
感受一下
第二阶段 打包 build
第三阶段 压缩称 zip
第四阶段 deploy 成功
- 好长时间 4个job 14分钟
成功 生成 front-end-caiwu.tar 可以在yml 命令添加 解压缩放置到对应后端指定目录中。
彩蛋
完整 yml 分享
image: node stages: - install - build - zip - deploy cache: paths: - node_modules/ - static/ - front-end-caiwu.tar before_script: - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y ) ' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY_DEV") - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config ' install: stage: install tags: - tagtym only: - master script: - npm install -g cnpm --registry=https://registry.npm.taobao.org - cnpm install build: stage: build tags: - tagtym only: - master script: - npm run build zip: stage: zip tags: - tagtym only: - master script: - tar -czvf front-end-caiwu.tar ./static deploy: stage: deploy tags: - tagtym only: - master script: - scp ./front-end-caiwu.tar root@$DEPLOY_SERVER_DEV:/data/frontEnd - ssh root@$DEPLOY_SERVER_DEV "cd /data/www/lighttpd/caiwu/public && rm -rf ./static/* && tar zxvf /data/frontEnd/front-end-caiwu.tar -C /data/www/lighttpd/caiwu/public && \cp ./static/index.html ../resources/views/welcome.blade.php" 复制代码
坑
- npm run build 在 mac 本机打包没问题,node 环境打包就有问题,原因:import 文件名字大小有误
- ssh 配置一直让输入密码,之前 $SSH_PRIVATE_KEY_DEV value 是从服务器上面 取的id_rsa,最后看底部博客随便找服务器,配置一个新的,然后就可以了。
- autodevops 可以设置关闭
参考
- Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1)
- GitLab之gitlab-ci.yml配置文件详解
- CICD 配置项
- http://[你的 git 地址].com/help/ci/examples/README.md
这篇关于GitLab CI/CD 自动部署构建的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-21拼接的xml报文,尖括号都被转移成了< 是什么原因-icode9专业技术文章分享
- 2024-09-21Svg Sprite Icon教程:从入门到实践
- 2024-09-21Svg Sprite Icon实战:从入门到上手
- 2024-09-20构建一个多PDF RAG聊天机器人:使用Langchain和Streamlit及代码
- 2024-09-20whatsapp webhook 回调的签名验证偶尔会失败是什么原因-icode9专业技术文章分享
- 2024-09-19Excel数据导出课程:初学者必备教程
- 2024-09-19Excel数据导入课程:新手入门指南
- 2024-09-19RBAC的权限管理入门教程
- 2024-09-19如何使用Svg Sprite Icon制作图标
- 2024-09-19uniapp 如何实现点赞后全局更新数据-icode9专业技术文章分享