gitlab的CICD

gitlab项目上传和CI/CD

参考: https://www.cnblogs.com/ligao/p/9590892.html

一.创建工程,上传本地项目到gitlab

Repository name: 仓库名称

Description(可选): 仓库描述介绍

Public, Private : 仓库权限(公开共享,私有或指定合作者)

Initialize this repository with a README: 添加一个README.md

gitignore: 不需要进行版本管理的仓库类型,对应生成文件.gitignore

license: 证书类型,对应生成文件LICENSE

1.创建项目在这里插入图片描述
2.复制项目的urlC:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1601798713394.png
3,在windows安装git工具,接下来就到本地操作了,首先右键你的项目,如果你之前安装git成功的话,右键会出现两个新选项,分别为Git Gui Here,Git Bash Here,这里我们选择Git Bash Here,进入如下界面,基础库即为我的项目名

C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1601798927990.png

4.接下来输入如下代码(关键步骤),把github上面的仓库克隆到本地
git clone http://localhost:8888/root/chen-coding.git
5.此时把你得项目“基础库”复制到chen-coding的文件夹 1601799092842.png
6.上传项目到gitlab
接下来依次输入以下代码即可完成其他剩余操作:
git init 初始化(如何已经初始化过了,则不用重复操作)
git add .     (注:别忘记后面的.,此操作是把chen-coding文件夹下面的文件都添加进来)
git commit  -m  "提交信息"  (注:“提交信息”里面换成你需要,如“first commit”)
git push -u origin master  (注:此操作目的是把本地仓库push到github上面,此步骤需要你输入帐号和密码)
如果push代码到gitlab时用户和账号输入错误,则 
git config --system --unset credential.helper
二.gitlab的CICD,安装runner
1.添加yum源
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash

  1. 安装runner
      yum install gitlab-ci-multi-runner
    
  2. 向GitLab-CI注册runner
      gitlab-ci-multi-runner register
      下图为参考
    

1601806305635.png

说明:

  • gitlab-ci-multi-runner register:执行注册命令
  • Please enter the gitlab-ci coordinator URL:输入 ci 地址
  • Please enter the gitlab-ci token for this runner:输入 ci token
  • Please enter the gitlab-ci description for this runner:输入 runner 名称
  • Please enter the gitlab-ci tags for this runner:设置 tag
  • Whether to run untagged builds:这里选择 true ,代码上传后会能够直接执行
  • Whether to lock Runner to current project:直接回车,不用输入任何口令
  • Please enter the executor:选择 runner 类型,这里我们选择的是 shell

到此,runner就注册完毕了。可以到gitlab上看下,刚刚注册的runner是否存在在这里插入图片描述

4.查看gitlab-runner状态和启动
systemctl status gitlab-runner
systemctl start gitlab-runner
5.gitlab关闭启动查看命令
关闭:gitlab-ctl stop
开启:gitlab-ctl start
查看状态:gitlab-ctl status
6.mvn环境配置要求

mvn环境需要在/usr/local/下,并且记得配置阿里云镜像

7.在shell记得设置shell可读,放开git需要忽略的*.sh的文件
8.gitlab-ci.yml和shell脚本案例参考

​ ①.为旭辉地产案例

​ gitlab-ci.yml

stages:
  - build
  - deploy

code_build:
  stage: build
  tags:
    - dev-build
  script:
    - set
    - bash ./ci_script/build-scripts/gobuild.sh
  artifacts:
     name: "publish"
     untracked: false
     paths:
       - publish/
  variables:
     GIT_STRATEGY: fetch
  only:
    - web
pkg_deploy:
  stage: deploy
  tags:
    - dev-deploy
  script:
    - bash ./ci_script/deploy-scripts/godeploy.sh
  dependencies:
    - code_build
  variables:
    GIT_STRATEGY: fetch
  #表示手动发布
  only:
    - web

shell脚本路径ci_script\build-scripts

​ gobuild.sh

#!/bin/bash
source /etc/profile
echo $CI_PROJECT_PATH_SLUG
echo "分支名称  $CI_BUILD_REF_NAME "
if [[ $env == 'dev' || $env == '' ]]; then
  export  env='dev'
elif [[ $env == 'uat' ]]; then
  export  env='uat'
elif [[ $env == 'prod' ]]; then
  export  env='prod'
else
  echo  "Please enter env parameter 【dev|uat|prod】"
fi

​ sc-server.sh

#!/bin/bash
echo $CI_PROJECT_PATH_SLUG
#编译后将包拷贝至新建的publish目录下,gitlab上可以在对应节点下载包。
#mvn clean deploy -Dmaven.test.skip=true || exit 1
mvn clean package -Dmaven.test.skip=true || exit 1 && \
    serverjarpath=$(find . -name "salesfee-server*.jar") && \
    apijarpath=$(find . -name "salesfee-api*.jar") && \
    mkdir -p publish && \
    mv $serverjarpath publish/salesfee-server.jar && \
    mv $apijarpath publish/salesfee-api.jar && \
    echo 'build successful!'

shell脚本路径ci_script\deploy-scripts

​ godeploy.sh

#!/bin/bash
source /etc/profile
echo $CI_PROJECT_PATH_SLUG

if [[ $env == 'dev' || $env == '' ]]; then
  export  env='dev'
elif [[ $env == 'uat' ]]; then
  export  env='uat'
elif [[ $env == 'prod' ]]; then
  export  env='prod'
else
  echo  "Please enter env parameter 【dev|uat|prod】"
fi

SCRIPTS_DIR=$(dirname "$0")
sh $SCRIPTS_DIR/sc-server.sh || exit 1

​ sc-server.sh

#!/bin/bash
#根据环境区分部署的IP数组值。环境区分是传入的env参数及选取的分支决定。
#替换argv值即可。
if [[ $env == 'test' && $CI_BUILD_REF_NAME == 'develop' ]]; then
   argv=(10.129.38.176 10.129.38.177)
elif [[ $env == 'prod' ]] && [[ $CI_BUILD_REF_NAME == 'master' || $CI_BUILD_REF_NAME =~ [v|V][0-9]+\.[0-9]+\.[0-9]+$ ]]; then
   argv=(生产IP数组)
else
   echo 'Please enter environment parameters test or prod !'
   exit 1
fi
echo ${argv[@]}
#遍历IP并部署:部署先将gitlab编译的包放到机器的/tmp目录下,然后登陆目标机器将包放到部署目录,并删除/tmp下内容。
#部署server
for i in "${argv[@]}";do
    scp -o stricthostkeychecking=no $CI_PROJECT_DIR/publish/salesfee-* cifiadmin@$i:/tmp/ && \
    ssh -o PasswordAuthentication=no -o StrictHostKeyChecking=no cifiadmin@$i "
    source /etc/profile ;
    ps aux |grep 'java'|grep 'salesfee-server'|grep -v 'grep' ;
    \cp /tmp/salesfee-server.jar /app/salesfee/ ;
	/app/salesfee/stop.sh || exit 1 ;
	/app/salesfee/start.sh || exit 1 ;
    rm -f /tmp/salesfee-server.jar ;
    ps aux |grep 'java'|grep 'salesfee-server'| grep -v 'grep' ;
    ps aux |grep 'java'|grep 'salesfee-api'|grep -v 'grep' ;
    \cp /tmp/salesfee-api.jar /app/salesfeeApi/ ;
	/app/salesfeeApi/stop.sh || exit 1 ;
	/app/salesfeeApi/start.sh || exit 1 ;
    rm -f /tmp/salesfee-api.jar ;
    ps aux |grep 'java'|grep 'salesfee-api'| grep -v 'grep' ;
    exit 0 ;" || exit 1
    echo "operate $i "
    sleep 40
done
echo 'deploy successful!'

​ stop.sh

echo "shutdown..."
pidlist=`ps -aux | grep salesfee-server-0.0.1-SNAPSHOT | grep -v bash |grep -v grep | awk '{print $2}'`
echo "进程号:"  
echo  $pidlist
kill -9 $pidlist
echo " salesfee-server has shutdown already"

​ start.sh

#!/bin/bash
echo "startUp..."
nohup java -Xms1024m -Xmx1024m -Dspring.profiles.active=test -jar /app/salesfee/salesfee-server.jar > /app/salesfee/nohup.out 2>&1 &
echo 'starting......'
echo "salesfee-server startUp already "

直接执行脚本 sh start.sh 是没有问题的
但是在另一个服务器上,执行这个服务器上的脚本,就会出现
nohup: 无法运行命令"java": 没有那个文件或目录 
解决办法
无法识别java命令,填写全路径就可以
nohup /usr/java/jdk1.8.0_131/bin/java -jar test.jar >> ./nohup.out 2>&1 &

​ ②.网上找的比较好的案例

​ shell脚本–打包

#!/bin/bash

DEPLOY_PATH="/home/micro-pool/"
APP_NAME="micro-pool"
LOG_NAME="nohup.log"

tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Stop Process...'
    kill -15 $tpid
fi
sleep 5

tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Kill Process!'
    kill -9 $tpid
else
    echo 'Stop Success!'
fi

sleep 2
rm -rf ${APP_NAME}.jar
rm -rf ${LOG_NAME}

git clone http://6666%40qq.com:1111@192.168.3.22:8099/bfs/${APP_NAME}.git
cd $APP_NAME
mvn clean package -Dmaven.test.skip=true
cd target
mv ${APP_NAME}.jar ${DEPLOY_PATH}
cd $DEPLOY_PATH
rm -rf ${APP_NAME}

nohup java -jar ${DEPLOY_PATH}${APP_NAME}.jar >${DEPLOY_PATH}${LOG_NAME} &
echo 'starting......'
sleep 2
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'start success!'
else
    echo 'start failed!'
fi

旭辉的redme.txt解释:
确保看懂readme,不懂的可以联系找SCM。
说明:

  1. 按如下配置,将附件.gitlab-ci.yml原样放到代码根目录,按如下目录结构建目录,在对应目录下编写构建及部署脚本,提交到代码仓库即可调试。
  2. 调试好后将.gitlab-ci.yml中注释的两行代码的“#”去掉。否则会提交代码自动触发构建。去掉后表示只能通过web端手动出发。
  3. 在对应测试或生产的应用服务器上跑附件脚本configkey.sh,用作部署时免密登录部署机器。
  4. 脚本里的CI_PROJECT_PATH_SLUG及CI_BUILD_REF_NAME参数时项目的缺省环境参数名,不要变动,将参数值替换自己项目的参数值即可。
    举例:
    若项目仓库地址是CI_PROJECT_URL=http://gitlab.cifi.com.cn/ark/backend/service
    则CI_PROJECT_PATH_SLUG=ark-backend-service。
    项目必须先自建develop分支,脚本里用变量CI_BUILD_REF_NAME可取到值“develop”。

步骤:
1.将附件配置文件.gitlab-ci.yml放到项目的代码根目录下,此文件定义构建及部署的pipelines流程。
2.创建CI目录及编写脚本。
a.)在项目根目录下新建ci_script目录。
b.)在ci_script目录下分别建“build-scripts”与“deploy-scripts”目录。
c.)在“build-scripts”目录下写gobuild.sh作为构建索引脚本。索引脚本只需替换if else的判断参数值及具体调用脚本即可,其他地方不要动。
d.)在“deploy-scripts”目录下写godeploy.sh作为构建索引脚本。索引脚本只需替换if else的判断参数值及具体调用脚本即可,其他地方不要动。
e.)构建脚本替换自己项目的构建命令。
f.)部署脚本替换argv的测试及生产环境的IP信息,及修改ssh登录到应用服务器的执行部署过程即可,如停服务、启动服务等。
注意部署时都必须先将包拷贝到/tmp,然后登录机器将包cp到发布目录,再将/tmp下包删除。
3.按照模板编写脚本比较简单。模板只是建议,可以结合项目实际情况将参数剥离出来加以改造。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值