1. 想用CI先要装好gitlab还有gitlab-runner! 宝塔安装gitlab,从宝塔软件商店进行安装

宝塔查看git公钥 宝塔安装gitlab_git

2. 进入gitlab创建项目并添加.gitlab-ci.yml文件,具体配置有很多参照官网,具体配置在下面,请耐心先看完流程

宝塔查看git公钥 宝塔安装gitlab_宝塔查看git公钥_02

3. 宝塔面板打开终端

4.宝塔从安装gitlab8.8.5到安装gitlab-ci-multi-runner

宝塔查看git公钥 宝塔安装gitlab_宝塔查看git公钥_03


依次输入一下命令

选择yum源

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash安装对应版本(这里版本不对会有很多坑,以下亲测,不然注册会报错403、405,有点慢等一下)

yum install gitlab-ci-multi-runner-1.10.7-1 成功后注册

gitlab-ci-multi-runner register

宝塔查看git公钥 宝塔安装gitlab_ssh_04

按照提示输入图片上的url和授权码,描述随意,tags暂时输入master,下一项填Xshell
完成后运行 注意不是start 而是run,之后添加.gitlab-ci.yml 文件后push master分支可查看最后连接时间,如果是几秒内有连接就是成功的

sudo gitlab-runner run

宝塔查看git公钥 宝塔安装gitlab_ci_05

5.下一步 添加.gitlab-ci.yml到项目根目录(与package.json同级)

CI思路:Gitlab会运行这个文件,然后从项目仓库拉取已追踪的代码,默认存入/root/bulids/... ,之后免登录到自己的部署服务器,把/root/bulids/...下文件拷贝到指定目录下,然后cd到指定目录下 运行npm inpm bulid ,如有需要就用pm2进行管理即可

.gitlab-ci.yml文件配置,大家可以拿去用,根据实际情况微调,记得点个赞哇。

stages:  #定义步骤列表类型,从上往下执行
    - build
    - release
build: #job名字
    stage: build  #和stages对应的名字
    image: #i.harbor.xxxx.com/public/node:10-alpine-node-sass  #使用的镜像,如果不写,就是注册runner默认镜像
    script:
        - npm -v ## 随意写一些命令
    artifacts:  #构建完成后,构建的产物(目录或者文件),丢给后面的步骤
        untracked: false # git没有追踪就不交付 用于优化node_modules
        paths:
            - .
        expire_in: 30 mins #保留1天内产物
    tags:  #选择runner的tag
        - master
    only:  #构建选择,如下,只选择develop的分支构建
        - master
release:
    stage: release
    before_script:  #执行前执行
        - eval $(ssh-agent -s)
        - echo "$SAIAN_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
        - mkdir -p ~/.ssh
        - chmod 700 ~/.ssh
        #- ssh-keyscan x.x.x.x >> ~/.ssh/known_hosts
        #- chmod 644 ~/.ssh/known_hosts
        - git config --global user.email "XX@qq.com"
        - git config --global user.name "root"

    image: i.harbor.xxxx.net/public/ssh-client:rsync
    script:
        - ssh -p 22088 -o StrictHostKeyChecking=no root@x.x.x.x -- "pm2 del saian-web|true"
        - rsync -azP --exclude=".gitignore" --exclude=".git" ./  /www/wwwroot/saian/
        - ssh -p 22088 -o StrictHostKeyChecking=no root@x.x.x.x -- "ls -al /www/wwwroot/saian/"
        - ssh -p 22088 -o StrictHostKeyChecking=no root@x.x.x.x -- "cd /www/wwwroot/saian/ && npm install && npm run build"
        - ssh -p 22088 -o StrictHostKeyChecking=no root@x.x.x.x -- "cd /www/wwwroot/saian/ && pm2 --watch --name saian-web start  /www/wwwroot/saian/node_modules/nuxt/bin/nuxt.js -- start"
    tags:
        - master
    only:
        - master
    when: on_success #只有当上一个job成功才执行,默认就是on_success

修改成自己的服务器IP,项目名,pm2名字

6.ssh免密码登录

如果不配置ssh免密码登录,gitlab ci只能帮你在服务器上拉最新分支代码、构建打包,还差最后一步,上传部署到测试/生产服务器,我们服务器是Linux系统,以下以Linux为例:

宝塔查看git公钥 宝塔安装gitlab_ssh_06


宝塔查看git公钥 宝塔安装gitlab_宝塔查看git公钥_07


宝塔查看git公钥 宝塔安装gitlab_宝塔查看git公钥_08


宝塔查看git公钥 宝塔安装gitlab_宝塔查看git公钥_09


大家看到 SAIAN_SSH_PRIVATE_KEY 变量。 这里的 SAIAN_SSH_PRIVATE_KEY 变量需要在项目的仓库上新增,目的是为了安全性考虑,不用暴露服务器的私钥, 那怎么新增呢?


可以看一下我写的博客,很详细解决Xshell 上ssh免密码登录问题,推荐先用Xshell尝试成功后再尝试这个CI !!!

宝塔查看git公钥 宝塔安装gitlab_ci_10


这种就是免密码登录成功的情况。

最后祝大家顺利,点个赞吧。