用helm搭建git-lab runner并簡(jiǎn)單測(cè)試使用

環(huán)境

  • kubernetes 1.15
  • gitlab 12.6.0-ee
  • gitlab runner 12.6.0
  • helm 2.14.3

kubernetes骏全、helm和gitlab已提前安裝配置好。helm配置可參考http://www.reibang.com/p/8aec2776f3f1,為gitlab添加kubernetes可參考http://www.reibang.com/p/1208c132b84c屡贺。

安裝配置

下載chart

下載gitlab runner helm chart
https://gitlab.com/gitlab-org/charts/gitlab-runner/tree/master

添加訪問(wèn)gitlab的證書(shū)

添加gitlab的證書(shū):

kubectl --namespace <NAMESPACE> create secret generic <SECRET_NAME> --from-file=<CERTFICATE_FILENAME>

#xxx為你的證書(shū)名
/home/admin(master) # kubectl create secret -n default generic gitlab-cert --from-file=./xxx.crt 

查看

/home/admin(master) # kubectl get secret                                                         
NAME                                 TYPE                                  DATA   AGE
default-token-4w6nw                  kubernetes.io/service-account-token   3      58d
gangly-zorse-gitlab-runner           Opaque                                2      23h
gitlab-cert                          Opaque                                1      14d

修改values.yaml

根據(jù)個(gè)人要求修改對(duì)應(yīng)配置,以下為我個(gè)人修改了的配置

# image: gitlab/gitlab-runner:alpine-v11.6.0 
image: ip:port/gitlab/gitlab-runner:alpine-bleeding-1 #這里鏡像我用的自己私有倉(cāng)庫(kù)的鏡像
gitlabUrl: https://gitlab.example.com/ #這里輸入你自己的gitlab的地址。
runnerRegistrationToken: " " #輸入你的注冊(cè)token

你可以把runner安裝為共享的或者特定的,token的查看分別在:Admin area > runner > Set up a shared Runner manually
shared.png

Project > Setting > CI / CD Settings > Runners > Expand


specific.png
certsSecretName: gitlab-cert #輸入你剛才創(chuàng)建的secret的名字
runners:
  ## Default container image to use for builds when none is specified
  ##
  image: ip:port/ubuntu:16.04 #這里我用的自己私有倉(cāng)庫(kù)里的鏡像
  imagePullSecrets: [regsecret] #輸入私有倉(cāng)庫(kù)的secret几睛,可參考http://www.reibang.com/p/de030582cd75
  helpers:
    # cpuLimit: 200m
    # memoryLimit: 256Mi
    cpuRequests: 100m
    memoryRequests: 128Mi
    image: ip:port/gitlab-runner-helper:x86_64-577f813d #這里也是用的我自己私有倉(cāng)庫(kù)里的鏡像
    # image: gitlab/gitlab-runner-helper:x86_64-latest 

如遇到couldn't execute POST against https://xxx/api/v4/runners: Post https://xxx/api/v4/runners: x509: certificate signed by unknown authority,修改envVars:

envVars:
  - name: RUNNER_EXECUTOR
    value: kubernetes
  - name: CI_SERVER_TLS_CA_FILE
    value: /home/gitlab-runner/.gitlab-runner/certs/<CERTFICATE_FILENAME>.crt
  - name: CONFIG_FILE
    value: /home/gitlab-runner/.gitlab-runner/config.toml

測(cè)試的時(shí)候ci/cd 遇到unable to get local issuer certificate的問(wèn)題粤攒,不知道怎么在helm的chart改所森,所以gitlab-runner-helper的鏡像是我自己關(guān)了git的ssl再打包的鏡像,知道怎么改的可以留言一下夯接,感謝焕济。
關(guān)閉git ssl認(rèn)證:git config --global http.sslVerify false

綁定本地 Docker 守護(hù)進(jìn)程

用 volume 綁定的形式把本地 docker.sock 通過(guò) host_path 的方式掛載到 runner 中,修改configmap.yaml文件

# git-lab/runner/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "gitlab-runner.fullname" . }}
  labels:
    app: {{ include "gitlab-runner.fullname" . }}
    chart: {{ include "gitlab-runner.chart" . }}
    release: "{{ .Release.Name }}"
    heritage: "{{ .Release.Service }}"
data:
  entrypoint: |
    #!/bin/bash
    set -e
    mkdir -p /home/gitlab-runner/.gitlab-runner/
    cp /scripts/config.toml /home/gitlab-runner/.gitlab-runner/

    # Register the runner
    if [[ -f /secrets/accesskey && -f /secrets/secretkey ]]; then
      export CACHE_S3_ACCESS_KEY=$(cat /secrets/accesskey)
      export CACHE_S3_SECRET_KEY=$(cat /secrets/secretkey)
    fi

    if [[ -f /secrets/gcs-applicaton-credentials-file ]]; then
      export GOOGLE_APPLICATION_CREDENTIALS="/secrets/gcs-applicaton-credentials-file"
    else
      if [[ -f /secrets/gcs-access-id && -f /secrets/gcs-private-key ]]; then
        export CACHE_GCS_ACCESS_ID=$(cat /secrets/gcs-access-id)
        # echo -e used to make private key multiline (in google json auth key private key is oneline with \n)
        export CACHE_GCS_PRIVATE_KEY=$(echo -e $(cat /secrets/gcs-private-key))
      fi
    fi

    if [[ -f /secrets/runner-registration-token ]]; then
      export REGISTRATION_TOKEN=$(cat /secrets/runner-registration-token)
    fi

    if [[ -f /secrets/runner-token ]]; then
      export CI_SERVER_TOKEN=$(cat /secrets/runner-token)
    fi

    if ! sh /scripts/register-the-runner; then
      exit 1
    fi

    # add volume config
    cat >>/home/gitlab-runner/.gitlab-runner/config.toml <<EOF
      [[runners.kubernetes.volumes.host_path]]
            name = "docker"
            mount_path = "/var/run/docker.sock"
    EOF
    # Start the runner
    exec /entrypoint run --user=gitlab-runner \
      --working-directory=/home/gitlab-runner

  config.toml: |
    concurrent = {{ .Values.concurrent }}
    check_interval = {{ .Values.checkInterval }}
    log_level = {{ default "info" .Values.logLevel | quote }}
    {{- if .Values.logFormat }}
    log_format = {{ .Values.logFormat | quote }}
    {{- end }}
    {{- if .Values.metrics.enabled }}
    listen_address = '[::]:9252'
    {{- end }}
  configure: |
    set -e
    cp /init-secrets/* /secrets
  register-the-runner: |
    #!/bin/bash
    MAX_REGISTER_ATTEMPTS=30

    for i in $(seq 1 "${MAX_REGISTER_ATTEMPTS}"); do
      echo "Registration attempt ${i} of ${MAX_REGISTER_ATTEMPTS}"
      /entrypoint register \
        {{- range .Values.runners.imagePullSecrets }}
        --kubernetes-image-pull-secrets {{ . | quote }} \
        {{- end }}
        {{- range $key, $val := .Values.runners.nodeSelector }}
        --kubernetes-node-selector {{ $key | quote }}:{{ $val | quote }} \
        {{- end }}
        {{- range $key, $value := .Values.runners.podLabels }}
        --kubernetes-pod-labels {{ $key | quote }}:{{ $value | quote }} \
        {{- end }}
        {{- range $key, $val := .Values.runners.podAnnotations }}
        --kubernetes-pod-annotations {{ $key | quote }}:{{ $val | quote }} \
        {{- end }}
        {{- range $key, $value := .Values.runners.env }}
        --env {{ $key | quote -}} = {{- $value | quote }} \
        {{- end }}
        {{- if and (hasKey .Values.runners "runUntagged") .Values.runners.runUntagged }}
        --run-untagged=true \
        {{- end }}
        {{- if and (hasKey .Values.runners "protected") .Values.runners.protected }}
        --access-level="ref_protected" \
        {{- end }}
        --non-interactive

      retval=$?

      if [ ${retval} = 0 ]; then
        break
      elif [ ${i} = ${MAX_REGISTER_ATTEMPTS} ]; then
        exit 1
      fi

      sleep 5 
    done

    exit 0

  check-live: |
    #!/bin/bash
    if /usr/bin/pgrep -f .*register-the-runner; then
      exit 0
    elif /usr/bin/pgrep gitlab.*runner; then
      exit 0
    else
      exit 1
    fi

使用helm安裝的gitlab runner

安裝

/home/admin/git-lab/runner(master) # ls 
CHANGELOG.md  Chart.yaml  CONTRIBUTING.md  LICENSE  NOTICE  README.md  scripts  templates  values.yaml
-------------------------------------------------------------------------------------
/home/admin/git-lab/runner(master) # helm install ./  
/home/admin/git-lab/runner(master) # helm list  
NAME            REVISION    UPDATED                     STATUS      CHART                         APP VERSION   NAMESPACE
gangly-zorse    1           Thu Jan  2 17:32:23 2020    DEPLOYED    gitlab-runner-0.12.0-beta     bleeding      default  
/home/admin/git-lab/runner(master) # kubectl get pods
NAME                                          READY   STATUS    RESTARTS   AGE
gangly-zorse-gitlab-runner-7d4f5f9bbb-th4m6   1/1     Running   0          24h

helm 刪除命令helm delete --purge <NAME>

在gitlab上查看runner是否部署成功

runner.png

簡(jiǎn)單測(cè)試

創(chuàng)建Dockerfile文件

FROM ip:port/tomcat:7  #我用的自己私有倉(cāng)庫(kù)的jing
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
EXPOSE 8080

創(chuàng)建一個(gè)deployment.yaml文件

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tomcat-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tomcat-demo
  template:
    metadata:
      labels:
        app: tomcat-demo
    spec:
      imagePullSecrets:
        - name: regsecret
      containers:
      - name: tomcat-demo
        image: REGISTRY/TAG:7
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-demo
spec:
  ports:
  - port: 80
    targetPort: 8080
    name: tomcat-demo
  selector:
    app: tomcat-demo
  type: NodePort

創(chuàng)建.gitlab-ci.yml文件

創(chuàng)建一個(gè)project盔几,并在里面創(chuàng)建一個(gè)名為.gitlab-ci.yml的文件吼蚁,內(nèi)容如下:

#just a test
image: ip:port/docker:stable-dind
variables:
  DOCKER_DRIVER: overlay2
  REGISTRY: "ip:port" #私有倉(cāng)庫(kù)地址
  TAG: "tomcat" 
stages:
  - build
  - deploy
docker-build:
  stage: build
    script:
      - echo "Building Dockerfile-based application..."
      - docker login https://ip:port -u <USER> -p <PASSWORD> #填寫(xiě)自己私有倉(cāng)庫(kù)的用戶和密碼
      - docker pull ip:port/tomcat:7 #拉取tomcat7的鏡像
      - docker build -t $REGISTRY/$TAG:$CI_COMMIT_SHORT_SHA .
      - docker push $REGISTRY/$TAG:$CI_COMMIT_SHORT_SHA
k8s-deploy:
  image: ip:port/bitnami/kubectl:latest #使用的自己倉(cāng)庫(kù)里的
  stage: deploy
  script:
    - echo "deploy to k8s cluster "
    - sed -i "s/REGISTRY/$REGISTRY/g" deployment.yaml
    - sed -i "s|TAG|$TAG|g" deployment.yaml
    - kubectl apply -f deployment.yaml

保存.gitlab-ci.yml文件并push到已經(jīng)配置好了runner的project,這里我創(chuàng)建了個(gè)空的project進(jìn)行的runner部署測(cè)試问欠。
運(yùn)行git push -u origin master后查看你的project的ci/cd。

demo.png

如果failed粒蜈,也可點(diǎn)進(jìn)build里去查看失敗原因顺献。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市枯怖,隨后出現(xiàn)的幾起案子注整,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肿轨,死亡現(xiàn)場(chǎng)離奇詭異寿冕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)椒袍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)驼唱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人驹暑,你說(shuō)我怎么就攤上這事玫恳。” “怎么了优俘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵京办,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我帆焕,道長(zhǎng)惭婿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任叶雹,我火速辦了婚禮财饥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘浑娜。我一直安慰自己佑力,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布筋遭。 她就那樣靜靜地躺著打颤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漓滔。 梳的紋絲不亂的頭發(fā)上编饺,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音响驴,去河邊找鬼透且。 笑死,一個(gè)胖子當(dāng)著我的面吹牛豁鲤,可吹牛的內(nèi)容都是我干的秽誊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼琳骡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼锅论!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起楣号,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤最易,失蹤者是張志新(化名)和其女友劉穎怒坯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體藻懒,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剔猿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嬉荆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片归敬。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖员寇,靈堂內(nèi)的尸體忽然破棺而出弄慰,到底是詐尸還是另有隱情,我是刑警寧澤蝶锋,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布陆爽,位于F島的核電站,受9級(jí)特大地震影響扳缕,放射性物質(zhì)發(fā)生泄漏慌闭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一躯舔、第九天 我趴在偏房一處隱蔽的房頂上張望驴剔。 院中可真熱鬧,春花似錦粥庄、人聲如沸丧失。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)布讹。三九已至,卻和暖如春训堆,著一層夾襖步出監(jiān)牢的瞬間描验,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工坑鱼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膘流,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓鲁沥,卻偏偏與公主長(zhǎng)得像呼股,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子画恰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容