GitLab集成kubernetes實現自動發佈

 建立GitLab源碼項目並上傳示例代碼

1. 建立GitLab源碼項目

  本示例中建立的GitLab源碼項目地址爲:https://gitee.com/SunHarvey/helloworld_java.git html

2. 執行如下命令獲取示例代碼並上傳至GitLab

git clone https://gitee.com/SunHarvey/helloworld_java.git
git remote add helloworld https://gitee.com/SunHarvey/helloworld_java.git
git push helloworld master

在Kubernetes集羣中安裝GitLab Runner

1. 獲取GitLab Runner的註冊信息

  • 登陸你的GitLab
  • 在頂部導航欄中,選擇Projects > Your projects。
  • Your projects頁簽下,選擇相應的Project。
  • 在左側導航欄中,選擇Settings > CI / CD。
  • 單擊Runners右側的Expand。

 

 獲取URL和registration token, 這個url 和token下邊要用到java

 

 2. 獲取並修改GitLab Runner的Helm Chart

獲取gitlab-runnergit

git clone https://github.com/haoshuwei/gitlab-runner.git

替換values.yaml文件中 gitlabUrl和runnerRegistrationToken字段, 就是上邊看到的那個兩個字段,github

也能夠配置全局的runner, 這個就不用每一個項目都加了,具體方法請看文章末尾附錄docker

gitlabUrl: http://xx.xx.xx.xx/
runnerRegistrationToken: "xxxxxx"

3 安裝GitLab Runner

打包應用緩存

helm package .

Successfully packaged chart and saved it to: /root/gitlab/gitlab-runner/gitlab-runner-0.1.37.tgz

安裝應用app

helm install --namespace gitlab --name  gitlab-runner *.tgz

查看相關的deployment/pod是否成功啓動。若成功啓動,則可在GitLab上看到註冊成功的GitLab Runnermaven

 

 也可在kubernetes上查看gitlab

 轉載請在文章開頭附上原文連接地址 : https://www.cnblogs.com/Sunzz/p/13716477.htmlui

設置全局變量

在GitLab的頂部導航欄中,選擇Projects > Your projects。
在Your projects頁簽下,選擇相應的Project。
在左側導航欄中,選擇Settings > CI / CD。
單擊Variables右側的Expand。添加GitLab Runner可用的環境變量。本示例中,添加如下三個變量。

 

REGISTRY_USERNAME:鏡像倉庫用戶名。
REGISTRY_PASSWORD:鏡像倉庫密碼。
kube_config:KubeConfig的編碼字符串。

執行如下命令生成KubeConfig的編碼字符串:

echo $(cat ~/.kube/config | base64) | tr -d " "

編寫.gitlab-ci.yml

編寫.gitlab-ci.yml文件,完成 helloworld 源碼項目的編譯構建、鏡像推送和應用部署(可參考hellowrld源碼項目中的.gitlab-ci.yml)

image: docker:stable
stages:
  - package
  - docker_build
  - deploy_k8s
variables:
  KUBECONFIG: /etc/deploy/config
  MAVEN_OPTS: "-Dmaven.repo.local=/opt/cache/.m2/repository"
mvn_build_job:
  image: maven:3.6.2-jdk-14
  stage: package
  tags:
    - k8s-runner
  script:
    - mvn clean install
    - cp target/helloworld-1.0.jar /opt/cache/
docker_build_job:
  image: docker:latest
  stage: docker_build
  tags:
    - k8s-runner
  script:
    - docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD registry-vpc.cn-hongkong.aliyuncs.com
    - cp /opt/cache/helloworld-1.0.jar target/helloworld-1.0.jar
    - docker build -t registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID .
    - docker push registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID

deploy_k8s_job:
  image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6
  stage: deploy_k8s
  tags:
    - k8s-runner
  script:
    - mkdir -p /etc/deploy
    - echo $kube_config |base64 -d > $KUBECONFIG
    - sed -i "s/IMAGE_TAG/$CI_PIPELINE_ID/g" deployment.yaml
    - cat deployment.yaml
    - kubectl apply -f deployment.yaml

.gitlab-ci.yml定義了一個Pipeline, 分三個階段步驟執行

image: docker:stable     # Pipeline中各個步驟階段的構建鏡像沒有指定時, 默認使用docker:stable鏡像
stages:
  - package              # 源碼打包階段
  - docker_build         # 鏡像構建和打包推送階段
  - deploy_k8s           # 應用部署階段
variables:
  KUBECONFIG: /etc/deploy/config   # 定義全局變量KUBECONFIG

maven源碼打包階段。

mvn_build_job:               # job名稱
  image: maven:3.6.2-jdk-14  # 本階段構建使用的構建鏡像
  stage: package             # 關聯的階段名稱
  tags:                      # GitLab Runner的tag
    - k8s-runner             # 指定runner-tag
  script:
    - mvn clean install      # 執行構建腳本
    - cp target/helloworld-1.0.jar /opt/cache/   # 構建物保存至緩存區

鏡像構建和打包推送階段

docker_build_job:
  image: docker:latest
  stage: docker_build
  tags:
    - k8s-runner
  script:
    - docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD registry-vpc.cn-hongkong.aliyuncs.com     # 登陸鏡像倉庫
    - cp /opt/cache/helloworld-1.0.jar target/helloworld-1.0.jar
    - docker build -t registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID .   # 打包Docker鏡像,使用的tag爲本次Pipeline的ID
    - docker push registry-vpc.cn-hongkong.aliyuncs.com/YourImageRepo/helloworld:$CI_PIPELINE_ID         # 推送Docker鏡像

應用部署階段

deploy_k8s_job:      # job名稱
  image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6  # 本階段構建使用的構建鏡像
  stage: deploy_k8s  # 關聯的階段名稱
  tags:
    - k8s-runner     # GitLab Runner的tag
  script:
    - mkdir -p /etc/deploy
    - echo $kube_config |base64 -d > $KUBECONFIG                # 配置鏈接Kubernetes集羣的config文件
    - sed -i "s/IMAGE_TAG/$CI_PIPELINE_ID/g" deployment.yaml    # 動態替換部署文件中的鏡像tag
    - cat deployment.yaml
    - kubectl apply -f deployment.yaml

執行Pipeline

提交.gitlab-ci.yml文件後,Project gitlab-java-demo會自動檢測到這個文件並執行Pipeline, 以下圖所示

 

 

 

 

訪問服務

若是部署文件中沒有指定Namespace,則默認會部署到GitLab命名空間下
kubectl -n gitlab get svc

 

注意事項

1. 取消Auto DevOps

 

 附錄:

 全局runner 添加

以管理員省份登陸gitlab ,進入adminArea --> Overview --> Runners, 就能夠看到 url 和token 了。

 

 文本參考:https://help.aliyun.com/document_detail/106968.html

相關文章
相關標籤/搜索