前言
项目开发时,经常修改了一两行代码就要发布到alpha测试站,beta测试站,正式站等多个服务器,如果是手工操作,就需要登录到每台服务器进行更新代码、打包代码、重启某些服务等一系列操作,这过程太繁琐且浪费时间。因此,可以使用 Gitlab-Runner代替手工操作,GitLab的安装可以参考《使用Docker自建代码托管平台GitLab》。
安装GitLab-Runner
docker-compose.yml如下:
version: '3'
services:
gitlab-runner:
image: gitlab/gitlab-runner
restart: always
container_name: gitlab-runner
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./config:/etc/gitlab-runner
networks:
default:
driver: bridge
使用 docker-compose up -d 启动应用
注册Runner到GitLab服务器
-
查看Runner registration token
-
执行
docker exec -it gitlab-runner gitlab-runner register进行注册 -
查看GitLab Runner,如下图,共享型Runner(所有项目都可以使用)注册成功
使用Runner部署代码
-
创建一个项目,这里使用Vue CLI快速创建一个前端项目
-
配置项目的环境变量,用于
.gitlab-ci.yml文件。这里使用 Ansible 进行部署,由于部署每个项目所执行的操作基本上都是不一样的,也就意味着配置需要跟着项目走,所以把Ansible的配置写进项目变量里,这里根据你们实际需求去配置 -
在项目根目录下编写
.gitlab-ci.yml文件,具体写法见官方文档variables: COMPILE_IMAGE: node:12.14.0-alpine ANSIBLE_IMAGE: ansible/centos7-ansible cache: key: "$CI_PROJECT_NAMESPACE" paths: - node_modules stages: - build - deploy build_alpha: only: - /^v\d+\.\d+\.\d+-alpha$/ stage: build image: $COMPILE_IMAGE artifacts: name: "${CI_COMMIT_TAG}" paths: - dist/ script: - npm config set registry https://registry.npm.taobao.org/ - npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/ - npm install - npm run build allow_failure: false deploy_alpha: only: - /^v\d+\.\d+\.\d+-alpha$/ stage: deploy image: $ANSIBLE_IMAGE variables: GIT_STRATEGY: none script: - mkdir ~/.ssh/ - echo -e "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - export ANSIBLE_HOST_KEY_CHECKING=False - echo -e "${ANSIBLE_HOSTS}" > ~/hosts - echo -e "${ANSIBLE_PLAYBOOK}" > ~/playbook.yml - cd ./dist - tar zcf ../dist.tar.gz * - ansible-playbook ~/playbook.yml -i ~/hosts --extra-vars "{'server_name':'alpha_server'}" allow_failure: false通过打Tag触发CI pipeline,Runner负责执行.gitlab-ci.yml定义的任务,打包代码并部署到服务器,部署代码这里使用了Ansible
hosts如下:[alpha_server] demo.complaybook.yml如下:
- hosts: '{{ server_name }}' remote_user: root tasks: - name: upload code synchronize: mode: push src: /builds/root/demo/dist.tar.gz dest: /tmp/dist.tar.gz rsync_opts: - "--compress" - name: update code shell: cd /app && rm -rf * && tar zxf /tmp/dist.tar.gz && chown -R nginx:nginx * -
打一个Tag(
v0.0.1-alpha)进行测试,如下图,打包和部署两个任务都执行成功了,并且可以正常访问alpha测试站,自动化部署完成。