GitLab集成Docker和K8S完成CI/CD持續集成部署工作

1.安裝gitlab runner

1.添加GitLab的官方存儲庫:

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

2.安裝最新版本的GitLab Runner

sudo yum install gitlab-runner

3.驗證安裝

gitlab-runner -version

2.註冊gitlab runner

gitlan-runner register

在這裏插入圖片描述

根據提示輸入

url(登陸GitLab->Settings->CI/CD->Runners展開,有url信息,防坑,可能需要把http改成https,否則提示401未授權),

token(登陸GitLab->Settings->CI/CD->Runners展開,複製token即可),

description(自定義),

tags(很關鍵,後面寫.gitlab-ci.yml配置文件時需要指定對應的tags)

3.ecs環境配置

備註:ecs上可能沒有安裝docker,需要自己安裝

1.docker安裝步驟地址如下

http://www.runoob.com/docker/centos-docker-install.html

2.安裝jdk環境變量

vim /etc/profile

JAVA_HOME=/yinjian/java/jdk-11.0.2/
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

3.安裝maven環境變量

vim /etc/profile

MAVEN_HOME=/yinjian/maven/apache-maven-3.6.0/
export MAVEN_HOME
export PATH=$PATH:$MAVEN_HOME/bin

(1)期間遇到一個問題!!!

修改/etc/profile出錯導致所有命令都command not found的解決辦法

export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin
因爲基本所有的shell命令都包含在上面幾個目錄中, 
執行完後,就可以執行其他命令,趕緊把/etc/profile的錯誤改正過來~~~ 
然後再
*#立即生效*
source /etc/profile

(2)maven裏settings.xml需要

配置鏡像服務器

<mirror>  
    <id>alimaven</id>  
    <name>aliyun maven</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
    <mirrorOf>central</mirrorOf>          
</mirror>

指定編譯的jdk版本,否則會有問題

<profile>  
    <id>jdk-11</id>  
    <activation>  
        <activeByDefault>true</activeByDefault>  
        <jdk>11</jdk>  
    </activation>  
    <properties>  
        <maven.compiler.source>11</maven.compiler.source>  
        <maven.compiler.target>11</maven.compiler.target>  
        <maven.compiler.compilerVersion>11</maven.compiler.compilerVersion>  
    </properties>   
</profile>

4.項目添加.gitlab-ci.yml文件發佈至gitlab測試

variables:
  REPOSITORY: "registry.cn-hangzhou.aliyuncs.com/workbei-project/workbei-ec-engine"
  TAG: 1.4.2
  DOCKER_USERNAME: xxx
  DOCKER_PASSWORD: xxx
stages:
  - package
  - build-and-push
  - deploy
#maven打成war包
maven-package:
  stage: package
  tags:
    - workbei-ec-engine
  only:
    - dev
  script:
    - mvn package -B -DskipTests
  artifacts:
    paths:
      - ec-web-main/target/workbeiurl.war
#docker構建鏡像and上傳鏡像
docker-build-and-push:
  stage: build-and-push
  tags:
    - workbei-ec-engine
  only:
    - dev
  script:
    - sudo docker login --username=$DOCKER_USERNAME --password=$DOCKER_PASSWORD registry.cn-hangzhou.aliyuncs.com
    - sudo docker build -t workbei-ec-engine:$TAG .
    - sudo docker tag workbei-ec-engine:$TAG $REPOSITORY:$TAG
    - sudo docker push $REPOSITORY:$TAG
#部署到K8S集羣並更新
k8s-deploy:
  stage: deploy
  tags:
    - workbei-ec-engine
  only:
    - dev
  script:
    - echo "k8s-deploy-start"

坑:

sudo docker login權限不夠
是因爲默認構建的時候是gitlab-runner 這個用戶 去執行這個命令的
所以要爲gitlab-runner 用戶提權
chmod +x /etc/sudoers
vim /etc/sudoers 
root那塊添加如下內容
gitlab-runner   ALL=(ALL)       NOPASSWD:ALL

如果順利,現在已經成功push到遠程倉庫了,下一步是k8s集羣拉取更新鏡像!

5.kubectl安裝

解壓
tar -zxvf kubernetes-client-linux-amd64.tar.gz
進入目錄
cd kubernetes/client/bin
把kubectl賦權可執行命令
chmod +x ./kubectl
把kubectl拷貝到環境變量中去
sudo mv ./kubectl /usr/local/bin/kubectl

阿里雲->容器服務->選擇集羣->內網訪問即可

1551169256065

成功後輸入命令查看最後整合效果

kubectl config view

6.完善.gitlab-ci.yml配置文件添加deploy步驟

k8s-deploy:
  stage: deploy
  tags:
    - workbei-ec-engine
  only:
    - dev
  script:
    - sudo kubectl set image deployment workbei-ec-engine-deploy workbei-ec-engine=registry-vpc.cn-hangzhou.aliyuncs.com/workbei-project/workbei-ec-engine:$TAG --namespace=dingtalk-auth

更新鏡像,等待,查看結果即可

7.最終版本

當時考慮多個job之間需要協調一個war包,選擇artifacts上傳到gitlab,但後面發現會特別耗時!最終選擇把package和build and push放到一個job裏。

variables:
  REPOSITORY: registry-vpc.cn-hangzhou.aliyuncs.com/workbei-project/workbei-ec-engine
  TAG: 1.4.3
  DOCKER_USERNAME: dingclouduser@1403209023012938
  DOCKER_PASSWORD: Create640321
stages:
  - package-build-push
  - deploy
#maven打成war包
maven-package:
  stage: package-build-push
  tags:
    - workbei-ec-engine
  only:
    - dev
  script:
    - mvn package -B -DskipTests
    - sudo docker login --username=$DOCKER_USERNAME --password=$DOCKER_PASSWORD registry-vpc.cn-hangzhou.aliyuncs.com
    - sudo docker build -t workbei-ec-engine:$TAG .
    - sudo docker tag workbei-ec-engine:$TAG $REPOSITORY:$TAG
    - sudo docker push $REPOSITORY:$TAG
  #artifacts:
    #expire_in: 60 mins
    #paths:
      #- ec-web-main/target/workbeiurl.war
#部署到K8S集羣並更新
k8s-deploy:
  stage: deploy
  tags:
    - workbei-ec-engine
  only:
    - dev
  #dependencies: []
  script:
    - /usr/local/bin/kubectl config use-context 211484640430774345-c5b80bf3faeea4ce3a7ca65809e5601b9
    - /usr/local/bin/kubectl set image deployment workbei-ec-engine-deploy workbei-ec-engine=$REPOSITORY:$TAG --namespace=dingtalk-auth

學習Linux命令

Linux which命令用於查找文件。which指令會在環境變量$PATH設置的目錄裏查找符合條件的文件。

which java

切換用戶

su gitlab-runner

複製文件

cp /root/.kube/config /home/gitlab-runner/.kube/config

修改文件夾或者文件擁有者和擁有組

chown gitlab-runner config
chgrp gitlab-runner config

查看文件(包含隱藏文件)

ll -a
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章