gitlab集成CICD


1、項目准備

在gitlab上新建個項目,本地克隆下來,寫簡單代碼提交至gitlab。

2、安裝gitlab-runner

1.拉取鏡像

docker pull gitlab/gitlab-runner

  

2.啟動gitlab-runner

        docker run -d --name gitlab-runner --restart always \

        -v /srv/gitlab-runner/config:/etc/gitlab-runner \

        -v /var/run/docker.sock:/var/run/docker.sock \

        gitlab/gitlab-runner:latest

  

3、注冊配置gitlab-runner

1.獲取 Gitlab CI Register Token:

先在gitlab上找到項目,然后在settingsàCI/CD—>Runners,展開,url和token備用。

 

  

2.注冊gitlab-runner    

docker run --rm -t -i -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register

  

標紅部分是需要輸入的。分別為:gitlab實例Url,token,runner描述,runner的標簽(要在.gitlab.ci.yml中用到,used to select Runner),執行器(docker或者其他的),默認docker鏡像。    

        這樣就可以在查看token的頁面看到新注冊的runner了

  

3.修改config.toml

/srv/gitlab-runner/config/

 # 日志的行數限制,此行為新增行,默認配置為4096

  

runners

  output_limit = 81920

  volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache","/root/.m2:/root/.m2","/web/project/:/web/project/"]

  

4.重啟gitlab-runner

docker restart gitlab-runner

  

4、生成config

在K8s的master節點上查看有無config文件。目錄地址為:/root/.kube文件夾下,是個隱藏文件。如果沒有,需要重新生成。

生成config文件部署:

1.進入管理員生成證書目錄,查看證書。

# cd TLS/k8s  ansible自動化部署的存放證書的地址是:/root/ansible-install-k8s-master/ssl/k8s

# vim admin-csr.json

{

  "CN": "admin",

  "hosts": [],

  "key": {

    "algo": "rsa",

    "size": 2048

  },

  "names": [

    {

      "C": "CN",

      "L": "BeiJing",

      "ST": "BeiJing",

      "O": "system:masters",

      "OU": "System"

    }

  ]

}

  

已有admin-csr.json,無需要再重新生成證書。

如需重新生成證書,執行下列命令。

# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin

2.創建kubeconfig文件

# 設置集群參數

kubectl config set-cluster kubernetes \

  --server=https://192.168.111.11:6443 \

  --certificate-authority=ca.pem \

  --embed-certs=true \

  --kubeconfig=config

 

# 設置上下文參數

kubectl config set-context default \

  --cluster=kubernetes \

  --user=cluster-admin \

  --kubeconfig=config

 

# 設置默認上下文

kubectl config use-context default --kubeconfig=config

 

# 設置客戶端認證參數

kubectl config set-credentials cluster-admin \

  --certificate-authority=ca.pem \

  --embed-certs=true \

  --client-key=admin-key.pem \

  --client-certificate=admin.pem \

  --kubeconfig=config

  

生成完后,ls命令,查看是否已生成。

  

復制config文件到/root/.kube目錄下。

  

通過kubectl config view --raw -o yaml查看配置文件內容,也可通過cat直接查看生成的config內容。復制config內容,在gitlab上配置環境變量。

  

3.配置環境變量

  

key可以自己起,在gitlab-ci.yaml中正確引用就行,value就寫上一步驟中config文件的內容。復制過來就可以。

 

  

5、項目中編寫.gitlab.ci.yml

.gitlab.ci.yml   參考官方文檔https://docs.gitlab.com/ee/ci/yaml/README.html

 

# 為了能夠使用go get,需要將代碼放在 $GOPATH 中,比如你的 gitlab 域名是 mydomain.com,

#你的代碼倉庫是 repos/projectname,默認的 GOPATH 是 /go,然后你就需要將你的代碼放置到 GOPATH 下面,

#/go/src/mydomain.com/repos/projectname,用一個軟鏈接指過來就可以了

before_script:

  - mkdir -p "/go/src/http://192.168.111.245/${CI_PROJECT_NAMESPACE}"

  - ln -sf "${CI_PROJECT_DIR}" "/go/src/http://192.168.111.245/${CI_PROJECT_PATH}"

  - cd "/go/src/http://192.168.111.245/${CI_PROJECT_PATH}/"

 

variables:

  APP_NAME: "kingc" #部署的項目的名字前綴

  DEMO_CONTAINER_PORT: 8080 #項目暴露的端口

  NODENAME: k8s-node2

  DEVOLPNAMESPACE: kube-public  #平台中開發環境的命名空間

  TESTNAMESPACE: kube-test #平台中測試環境的命名空間

  DEMO_IMAGE_NAME: "192.168.111.60:5000/${DEMO_IMAGE}:${CI_PIPELINE_ID}" #由私有倉庫的地址/項目名:管道ID

#  SONARQUBETOKEN: "86e55427257912adb83ad274ead0942476042952" #sonarqube的token

#  SONARURL: "http://192.168.30.104:9000" #sonarqube的地址

  GITLABURL: "http://192.168.111.245" #gitlab的地址

  GITLABUERTOKEN: "Zj8p4t1izepgwStdJ2Pf" #gitlab的Access Tokens

  REGISTRY: 192.168.111.60:5000 #私有倉庫

#  configMap: " testmysql" #configmap的名字

  DEMO_IMAGE: "demo"

 

 

 

image: docker:19.03.12

# 定義三個階段

stages:

  - compile

  - build

  - deploy

 

compile:

  # 打包用到了maven, 所有需要拉取maven鏡像, 這是我自己構建的阿里雲maven私服的maven鏡像

  image: registry.cn-hangzhou.aliyuncs.com/gjing/maven:1.0

  # 指定階段

  stage: compile

  # 運行腳本, 使用變量時要用到 $ 符號

  script:

    - mvn $MAVEN_OPTS clean package -Dmaven.test.skip=true

    - mkdir -p /web/project/cicddemo

    - cp -r target/cicddemo-0.0.1-SNAPSHOT.jar Dockerfile /web/project/cicddemo/

  retry: 2

  # 只作用在master分支

  only:

    - master

  # 創建runner時指定的tag

  tags:

    - demo

 

build:

  image: docker:19.03.12

  #when: manual

  stage: build

  script:

    - docker build --build-arg JAR_FILE=cicddemo-0.0.1-SNAPSHOT.jar -t $REGISTRY/${DEMO_IMAGE}:${CI_PIPELINE_ID}  /web/project/cicddemo/

    - docker push $REGISTRY/${DEMO_IMAGE}:${CI_PIPELINE_ID}

  retry: 2

  only:

    - master

  tags:

    - demo

deploy:

  image: 192.168.111.60:5000/kubectl:1.16.6

  stage: deploy

  #when: manual

  script:

    - mkdir $HOME/.kube && cat $KUBE_CONFIG > $HOME/.kube/config

    #- kubectl set image deployment.v1.apps/fangtu fangtu=192.168.30.88:5000/${CI_PROJECT_NAME}:${CI_PIPELINE_ID} -n kube-public

    - cd gitlabcicd/

    - sed -i "s#__namespace__#${DEVOLPNAMESPACE}#g" deployment_demo.yaml ingress_demo.yaml

    - sed -i "s#__appname__#${APP_NAME}#g" deployment_demo.yaml ingress_demo.yaml

    - sed -i "s#__democontainerport__#${DEMO_CONTAINER_PORT}#g" deployment_demo.yaml

    - sed -i "s#__nodeName__#${NODENAME}#g" deployment_demo.yaml

    - sed -i "s#__demoimagename__#${DEMO_IMAGE_NAME}#g" deployment_demo.yaml

    - kubectl apply -f deployment_demo.yaml

    - kubectl apply -f ingress_demo.yaml

  retry: 2

  only:

    - master

  tags:

    - demo

編寫deployment_demo.yaml和ingress_demo.yaml

在項目根目錄下,新建gitlabcicd文件夾,下面有deployment_demo.yaml和ingress_demo.yaml文件。

deployment_demo.yaml 內容如下:

---

apiVersion: apps/v1

kind: Deployment

metadata:

  name: __appname__-demo

  namespace: __namespace__

  labels:

    app: __appname__-demo

spec:

  replicas: 1

  revisionHistoryLimit: 10

  selector:

    matchLabels:

      app: __appname__-demo

  template:

    metadata:

      labels:

        app: __appname__-demo

        track: stable

    spec:

      containers:

        - name: __appname__-demo

          image: __demoimagename__

          imagePullPolicy: IfNotPresent

          ports:

            - name: http-metrics

              protocol: TCP

              containerPort: __democontainerport__

      nodeName: __nodeName__

---

apiVersion: v1

kind: Service

metadata:

  name: __appname__-demo

  namespace: __namespace__

  labels:

    app: __appname__-demo

spec:

  type: ClusterIP

  ports:

    - protocol: TCP

      name: web

      port: 80

      targetPort: __democontainerport__

  selector:

app: __appname__-demo

 

 ingress_demo.yaml 內容如下:

---

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

  name: __appname__-demo

  namespace: __namespace__

  annotations:

    kubernetes.io/ingress.class: "nginx"

spec:

  rules:

    - host: kingc.demo.com.cn

      http:

        paths:

          - path: /demo

            backend:

              serviceName: __appname__-demo

              servicePort: 80

6、安裝配置sonarqube

參考網址:https://www.cnblogs.com/wu-wu/p/13489207.html

1.docker 安裝sonarqube

1 docker pull postgres 拉取數據庫

2 docker pull sonarqube 拉取sonarqube

1 啟動postgresql

$ docker run --name postgres -p 5432:5432 -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -e TZ=PRC -d postgres

2 啟動 sonarqube

$ docker run -d -p 1022:22 -p 9000:9000 -e "SONARQUBE_JDBC_URL=jdbc:postgresql://192.168.111.21:5432/sonar" -e "SONARQUBE_JDBC_USERNAME=sonar" -e "SONARQUBE_JDBC_PASSWORD=sonar" --name sonarqube sonarqube:7.9.1-community

docker run -d -p 1023:22 -p 9001:9000 -e "SONARQUBE_JDBC_URL=jdbc:postgresql://192.168.30.104:5431/sonar" -e "SONARQUBE_JDBC_USERNAME=sonar" -e "SONARQUBE_JDBC_PASSWORD=123456" --name sonarqube9091 sonarqube:7.9.1-community

啟動會報錯,自動停止。報錯內容如下:

  

解決方法:

修改/etc/sysctl.conf

vm.max_map_count=262144

並執行命令

sysctl -p

  

3 打開 http://localhost:9000/ , 點擊 "Log in"

登錄賬號:admin 密碼:admin

啟動時間較長,請稍等。

2.sonarqube安裝簡體中文包

依次點擊頁面:Administration – Marketplcae – All – Chinese Pack(Install)依次點擊頁面:Administration – Marketplcae – All – Chinese Pack(Install)

3.安裝Sonar GitLab Plugin插件

可以直接下載 https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases該插件,放到 <sonarqube_install_dir>/extensions/plugins 目錄,重啟 SonarQube 即可。

 

將插件考到容器內部:

docker cp /root/sonar-gitlab-plugin-2.1.0.jar sonarqube:/opt/sonarqube/extensions/plugins/

4.配置gitlab個人訪問令牌。

  

 

5.配置sonarqube的gitlab插件

admin 登錄 SonarQube,點擊 配置 —> 通用配置 —> GitLab —> Reporting —> 設置 GitLab User Token 以及 GitLab url。GitLab User Token 為 GitLab 上用戶的 Token(這里使用上邊統一賬戶 sonarQube Token),其他配置默認即可。

 

 

6.SonarQube生成Token

在sonarqube中生成token供yml中使用

  

 

7、修改gitlab-ci.yml

1.修改發件人郵箱

需要打開QQ郵箱的smtp設置。

參考網址:https://www.cnblogs.com/kimsbo/p/10671851.html

首先要開啟QQ郵箱的smtp服務,默認是關閉的。

登錄QQ郵箱,點“設置” - “帳戶”。

找到“POP3/SMTP服務”和“IMAP/SMTP服務”項,點“開啟”。

  

開啟之后,點擊“生成授權碼”。這個授權碼將作為郵箱的身份認證密碼。

  

8、掛私服(若有)

gitlab-runner的config.toml中掛載maven倉庫到宿主機/root/.m2目錄下。

修改此目錄下的settings.xml文件,加入可從maven私服下載。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM