阿八博客
  • 100000+

    文章

  • 23

    评论

  • 20

    友链

  • 最近新加了很多技术文章,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

GitLab-CI自动化部署(持续集成)

欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/jsh/2019/1010/116971.html

一、安装及配置

1、gitlab及runner安装

1.)gitlab安装

$ docker run -d --name gitlab -p 1443:443 -p 9800:80 --restart always \    -v /opt/gitlab/config:/etc/gitlab \    -v /opt/gitlab/data:/var/opt/gitlab \    -v /opt/gitlab/logs:/var/log/gitlab \    --privileged=true \    gitlab/gitlab-ce:latest

2.)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

3.)gitlab-runner注册

进入gitlab-runner容器,进行注册
$ docker exec -it gitlab-runner gitlab-ci-multi-runner register
注册时需要的url、token都在settings > CI/CD或runner中找到,再输入runner名称,executor执行器选shell好了

4.)相关应用安装

进入gitlab-runner容器,下载安装node、npm等全局依赖
2、gitlab-ci配置详解
gitlab-runner注册成功后,当监听到push等事件,会自动执行.gitlab-ci.yml配置中任务,ci配置通常由stages、job等主要部分组成
Stages
阶段/步骤,多个Stage按以下顺序执行,若其中任何一个失败,则后续stage不执行
stages:  - build  - test  - deploy
公用
所有stage之前,可以执行一些公共的操作
before_script:  # after_script,在所有job之后  - npm set registry http://registry.npm.taobao.org
Job
任务可以有多个
job1:  # 执行阶段,若不指定默认test  stage: build    # 指定执行的runner标签  tags:    - runner-build  # 触发分支  only:    - master    - release    - /^release\/.*$/    - triggers      # 自定义变量  variables    sourceDir: ./src      # 执行脚本  script:    - cd ./xxx    - npm install    - npm run lint    - npm run build      # 是否允许失败,true表示失败后不影响后面流程  allow_failure: false  

二、自动化构建

1、设置远程登录
通过用户名+公钥的方式可以让脚本在无密的情况下登录远程服务器

1.)查看/生成ssh密钥

进入gitlab-runner容器,查看/home/gitlab-runner/.ssh目录下 id_rsa(私钥)、id_rsa.pub(公钥)文件,若没有可通过下面命令生成:
$ ssh-keygen -t rsa -C  'your email@domain.com'

2.)公钥追加到服务器ssh认证文件

将/home/gitlab-runner/.ssh/id_rsa.pub公钥通过rz命令上传到服务器~/目录下,也可以直接copy后手动编辑添加
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
2、自动化部署

1.)gitlab ci配置

./.gitlab-ci.yml文件
stages:  - deployjob:  stage: deploy  tags:    - runner-deploy  only:    - master    - triggers  script:    - chmod +x ./bin/deploy.sh    - ./bin/deploy.sh encore

2.)编译/部署脚本

./bin/deploy.sh文件
#!/bin/bash# 服务名接收/判断serv=$1if [ ! $serv ] ;then    echo -e "\e[31;5mError: No service name config in .gitlab-ci.yml\!\e[0m"    exit 2finpm config set registry http://registry.npm.taobao.orgclear# 1.编译webecho -e "\e[1;36;5m======>Start buiding [$serv] web...\e[0m"cd ./webnpm inpm run build# 2.编译serverecho -e "\e[1;36;5m======>Start buiding [$serv] server...\e[0m"cd ../servernpm i --production# 3.打包远程传送echo -e "\e[1;36;5m======>Start sending [$serv] over ssh...\e[0m"cd ../tar -zcf $serv.tar.gz ./bin ./web/dist ./server ./docker-compose.yml ./.gitlab-ci.yml# 传送scp -o StrictHostKeyChecking=no $serv.tar.gz root@192.168.4.28:/root/staticgit clean -fdgit reset --hard HEAD# 4.远程部署echo -e "\e[1;36;5m======>Start deploy [$serv] service...\e[0m"# 远程执行批量脚本ssh -Tq user@x.x.x.x << remotessh#----------------------------------------------cd /root/staticif ! test -e $serv; then   mkdir $servfitar -mzxf $serv.tar.gz -C $servrm $serv.tar.gzcd $serv# 创建/启动服务docker-compose up -dexit#----------------------------------------------remotesshecho -e "\e[1;32mService [$serv] deploy success!\e[0m"

注意事项:

a.)scp/ssh参数-o StrictHostKeyChecking=no用来忽略第一次连接提示生成known_hosts文件
b.)ssh参数-Tq用来去掉伪终端提示
c.)远程执行批量脚本需用remotessh或EOF(不输出echo内容)
d.)变量申明推荐放脚本头部,若定义在remotessh代码块中变量$都需要转义成\\$,也可直接在第一个remotessh或EOF加引号
e.)exit 0:成功退出,1:失败退出,2:用法不当退出

相关文章

暂住......别动,不想说点什么吗?
  • 全部评论(0
    还没有评论,快来抢沙发吧!