一千萬個為什麽

搜索

一次/在gitlab ci上設置工作?



我正在建立一個編譯和構建新docker鏡像的管道,然後將這些鏡像部署到測試kubernetes集群。

我正在使用shell跑步者。

我需要設置我的 kubectl 客戶端以指向測試kubernetes集群。 (即設置集群和上下文)。

據我所知 - 我應該只需要運行一次。有沒有辦法讓它運行一次,如 .gitlab-ci.yaml 中所定義的那樣?或者我應該每次只在 before_script 中重復設置步驟?

轉載註明原文: 一次/在gitlab ci上設置工作?

一共有 1 個回答:

我處理了同樣的問題。有些人建議使用Gitlab組“秘密”並使用 before_script 。因為我知道我也要部署,並且需要在我的跑步者上使用其他工具,比如“helm”,所以我制作了自己的docker容器。我仍然在base64編碼組秘密中保留我的集群配置,但是我在dockerfile中將它設置為這樣。

ENV kube_config=$kube_config
RUN echo -n ${kube_config} | base64 -d > ~/.kube/config

現在只需為你的gitlab runner設置一個環境變量來指向你的新圖像。

KUBERNETES_IMAGE: registry.gitlab.com/MY_USERNAME/MY_REPO_NAME/MY_IMAGE_NAME:latest

別忘了測試你的新容器!

stages:
  - build
  - test
  - release

variables:
  CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE/gitlab_runner:$CI_COMMIT_REF_NAME
  CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE/gitlab_runner:latest

before_script:
  - apt-get update && apt-get install docker.io -y
  - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY

Build Image:
  stage: build
  script:
    - docker build --build-arg kube_config=${kube_config} -t ${CONTAINER_TEST_IMAGE} .
    - docker push ${CONTAINER_TEST_IMAGE}
  except:
    - master

Test Kubectl:
  stage: test
  script:
    - docker pull ${CONTAINER_TEST_IMAGE}
    - docker run --rm ${CONTAINER_TEST_IMAGE} kubectl get deployments -n kube-system
  except:
    - master

Test Helm:
  stage: test
  script:
    - docker pull ${CONTAINER_TEST_IMAGE}
    - docker run --rm ${CONTAINER_TEST_IMAGE} helm ls
  except:
    - master

Test Docker:
  stage: test
  script:
    - docker pull ${CONTAINER_TEST_IMAGE}
    - docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ${CONTAINER_TEST_IMAGE} docker images
  except:
    - master

release-image:
  stage: release
  script:
    - docker pull $CONTAINER_TEST_IMAGE
    - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
    - docker push $CONTAINER_RELEASE_IMAGE
  only:
    - master

Edit: Missed this part.. I'm using a shell runner.

所以我所說的帖子可能不相關。我怎麽認為使用gitlab runner直接在集群上構建和部署有一些優勢。