CI/CD的最终实现:

一、登录gitlab-runner机器
切换runner普通用户

[[email protected] ~]# su - gitlab-runner

二、编写.gitlab-ci.yml文件
随便创建一个目录,叫什么无所谓

[[email protected] ~]$ mkdir git

将gitlab上想要发布的项目克隆到这个目录里

[[email protected] git]$ git clone [email protected]:xxx/xxx.git

在项目目录里面创建一个.gitlab-ci.yml文件,如下:
Gitlab CI/CD自动化部署的实现 (三)

[[email protected] ~]$ cat .gitlab-ci.yml

stages: 
    - test
    - deploy
test_job:
    stage: test
    script: mvn clean package sonar:sonar -Dsonar.host.url=http://sonar.rabbit.com -Dsonar.login=5081ab49551c333d3c03565696bcd22c9ec1b7c5 -Dsonar.java.binaries=target/classes
    only:
        - master
    tags:
        - shell
deploy_job:
    stage: deploy
    script:
        - mvn clean package -P dev -Dmaven.test.skip=true -Djacoco.skip=true
        - bash -x ~/shell/build.sh "$CI_COMMIT_REF_NAME"
    only:
        - dev
        - test
        - master
    tags:

另外包括传包,启动等命令都可以在yml文件里面体现(这里规划到一个脚本build.sh中),这样只要dev/test/master某一分支有commit的改变了,gitlab-ci就会自动创建job来自动发布

Gitlab CI/CD自动化部署的实现 (三)

至此gitlab CI自动代码发布就顺利实现了

build.sh脚本文件内容:

group_name=$(pwd | awk -F '/' '{print $(NF-1)}')
if [ $group_name != "marsooo" ];then
	echo $group_name"  error"
	exit 1
fi
project=$(pwd | awk -F '/' '{print $NF}')
branch=$1
profix=".tar.gz"
list=""
path=""
if [ $project = "rabbit-app" ];then
	list=$branch"_web"
	profix=".war"
	path=""
elif [[ $project = rabbit-[a-z]*-price ]]; then
	list=$branch"_store"
	project=${project%-*}
	path=$project"-service/"
else
	list=$branch"_order"
	path=$project"-service/"
fi
. ~/shell/server_list.properties
list=$(echo $(eval echo '$'"$list"))
port=$(echo $(eval echo '$'"$1_port"))
OLD_IFS="$IFS"
IFS=","
arr=($list)
IFS="$OLD_IFS"
for i in ${arr[@]}
 do
     ssh -p$port "[email protected]$i" "bash -x /opt/marsooo/gitlab-ci/build_before.sh $project $profix"
     scp -P "$port" $path"target/"*$profix "[email protected]$i:/opt/marsooo/gitlab-ci/$project/"
     ssh -p$port "[email protected]$i" "source /etc/profile;bash -x /opt/marsooo/gitlab-ci/build.sh $project"
 done

 

相关文章: