微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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/

3.配置gitlab个人访问令牌。

 

 

 

4.配置sonarqube的gitlab插件

admin 登录 SonarQube,点击 配置 —> 通用配置 —> GitLab —> Reporting —> 设置 GitLab User Token 以及 GitLab url。GitLab User Token 为 GitLab 上用户的 Token(这里使用上边统一账户 sonarQube Token),其他配置认即可。

 

 

4.sonarQube生成Token

在sonarqube中生成token供yml中使用

 

 

https://oapi.dingtalk.com/robot/send?access_token=e4fd20cb2894acf264a7b6e62500ddf2830685631934a5e77c72bfe07cc97f09

 

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私服下载。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐