gitlab的ci功能測試之旅

簡述:gitlab ci ,依賴runner 來執行 Pipelines,Pipelines包含對多個階段中job的定義。html

第一步:安裝runnerjava

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
sudo yum install gitlab-ci-multi-runner

第二步:註冊runnergit

須要兩個東西 :私服地址URL 和 TOKEN,能夠在gitlab項目的設置->ci/cd中找到web

sudo gitlab-ci-multi-runner register
回車後按提示輸出url 和 token

注意:經過gitlab-ci-multi-runner register註冊的Runner配置會存儲在/etc/gitlab-runner/config.toml中,若是須要修改可直接編輯該文件

注意事項:這裏我本身對git-runner service 進行了 工做空間修改,這裏要對注意一下新目錄的權限問題apache

git-runner 配置詳解api

第三步:在 gitlab 私服配置ci/di配置文件 gitlab-ci.ymltomcat

 gitlab-ci.yml 官方詳解bash

# 定義 stages,我暫時只定義了兩個階段  構建、發佈
stages:
  - build
  - deploy

# 定義 job
build-job:
  stage: build
  script:
    - mvn clean compile

# 定義 job
deploy-job:
  stage: deploy
  script:
    - /data/script/deploy.sh

這裏注意一下:咱們的項目是依賴maven 構建的,因此須要在runner的服務器上須要安裝 maven服務器

附加一下我測試用的構建部分代碼:爲了匹配歷史項目,正規項目跟進本身的需求修改構建代碼app

<build>
		<finalName>freezing</finalName>
		<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
		<outputDirectory>${deploy.path}/WEB-INF/classes/com/</outputDirectory>
		<resources>
			<resource>
				<directory>${basedir}/src/main/webapp</directory>
				<excludes>
					<exclude>WEB-INF/**/*.*</exclude>
					<exclude>templates/default/z/**/*.*</exclude>
				</excludes>
				<targetPath>${deploy.path}/</targetPath>
			</resource>
			<resource>
				<directory>${basedir}/src/main/resources</directory>
				<excludes>
					<exclude>**/*.*</exclude>
				</excludes>
			</resource>
			<resource>
				<directory>${basedir}/src/main/config</directory>
				<excludes>
					<exclude>**/*.*</exclude>
				</excludes>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<compilerArguments>
						<verbose />
						<extdirs>${basedir}/src/main/webapp/WEB-INF/lib</extdirs>
					</compilerArguments>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<executions>
					<execution>
						<id>copy-dependencies</id>
						<phase>process-resources</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<outputDirectory>${basedir}/src/main/webapp/WEB-INF/lib</outputDirectory>
							<overWriteSnapshots>true</overWriteSnapshots>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

附加劇啓tomcat腳本

#!/bin/bash
# tomcat 目錄
p='/data/tomcat7'
# tomcat 服務地址
sname='/etc/init.d/tomcat7'
work=${p}'/work/'
`rm -rf ${work}`
tomcatpath=${p}'/bin'
echo 'operate restart tomcat: '$tomcatpath
pid=`ps aux | grep $tomcatpath | grep -v grep  | awk '{print $2}'`
echo 'exist pid:'$pid

if [ -n "$pid" ]
then
{
   echo ===========shutdown================
   $sname  stop
   sleep 2
   pid=`ps aux | grep $tomcatpath | grep -v grep  | awk '{print $2}'`
   if [ -n "$pid" ]
   then
    {
       sleep 2
       echo ========kill tomcat begin==============
       echo $pid
       kill -9 $pid
       echo ========kill tomcat end==============
           sleep 2
           echo ===========startup.sh==============
           $sname  start
    }
        else
        $sname  start
   fi
 }
else
echo ===========startup.sh==============
$sname  start
fi

第四步:驗證

經過push代碼,觸發工做流,而後查看運行日誌

這篇文章是很基礎的操做,讓你快速感覺它的簡單易用,高級功能能夠參考官方文檔,或者後期可能會更新一下博客

補充幾個小腳本:遍歷更新文件的時間和參照文件作比較來判斷是否須要重啓tomcat、檢測某個地址是否可用

#! /bin/bash
deploy_path="/data/script/deploy.sh"

#遍歷文件夾
res=0  #默認類未更新不須要重啓tomcat
function read_dir(){
        for file in `ls $1`       #注意此處這是兩個反引號,表示運行系統命令
        do
            if [ -d $1"/"$file ]  #注意此處之間必定要加上空格,不然會報錯
            then
                read_dir $1"/"$file
            else
                res=$(compareTime $1"/"$file  $deploy_path)
                if [ $res == 1 ]
                then
                        break
                fi
            fi
        done
}

#比較文件修改時間
function compareTime(){
        newer=`find $1 -newer $2`
        if [ "$newer" == "$1" ]
        then
        echo 1
        return 1  #$1 大於 $2
        else
        echo 0
        return 0  # 相反
        fi
}

#讀取第一個參數
read_dir $1
echo $res
#!/bin/bash
testapi='http://www.cn-healthcare.com/freezing'
urlstatus=$(curl -s -m 5 -IL $testapi|grep 200)
if [ "$urlstatus" == "" ];then
        echo "testapi result is  error"
        return error
else
  echo "testapi result is right:"$urlstatus
fi

補充:代碼須要同步到多臺機器,可能須要用到,各個機器之間免密登陸

配置服務器之間的ssh登陸

三臺服務器的ip分別是:
192.168.0.101,
192.168.0.102,
192.168.0.103
gitlab-runner安裝的服務器爲101,另外兩臺爲應用服務器
因此要創建 gitlab-runner用戶與102和103之間的root ssh免密碼登陸

1.先在101服務器切換gitlab-runner用戶

su gitlab-runner

2.使用ssh-keygen -t rsa
生成ssh的公鑰和私鑰
ssh-keygen -t rsa #回車以後3次回車便可

會在 /home/gitlab-runner/.ssh目錄下發現2個文件
id_rsa.pub 和id_rsa

3.而後在應用服務器root用戶,重複上述操做,這樣 root用戶的ssh的公鑰和私鑰也生成了,接下來就是將gitlab-runner用戶的公鑰寫入root用戶的authorized_keys文件中

cat /home/gitlab-runner/.ssh/id_rsa.pub >>/root/.ssh/authorized_keys

4.重啓ssh service ssh restart

5.先切換到gitlab-runner用戶 su gitlab-runnner

6.使用ssh登陸root用戶 ssh root@192.168.56.102
你會發現你已經切換到了root用戶了

注意 第一次鏈接會提示yes/no, 輸入yes便可

相關文章
相關標籤/搜索