簡體   English   中英

帶有連接到 MySQL 的單元測試的 Gitlab ci

[英]Gitlab ci with unit testing that connects to MySQL

我已經建立了一個 Golang 項目,我想在使用 GitLab ci 成功測試后部署該應用程序,但是在進行一些測試時,由於無法連接到 MySQL,它失敗了。 我想在一個階段使用 Golang 圖像和 MySQL 圖像。 這是我目前的管道。 在階段測試,在腳本失敗之前(/bin/bash: line 130: mysql: command not found)

# To contribute improvements to CI/CD templates, please follow the Development guide 

at:
# https://docs.gitlab.com/ee/development/cicd/templates.html
# This specific template is located at:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Go.gitlab-ci.yml

image: golang:latest

services:
  - mysql:latest

stages:
  - test
  - build
  - deploy

variables:
  MYSQL_DATABASE: "db"
  MYSQL_USER: "user"
  MYSQL_PASSWORD: "password"
  MYSQL_ROOT_PASSWORD: "password"

format:
  stage: test
  variables:
    # Configure mysql environment variables (https://hub.docker.com/_/mysql/)
    MYSQL_DATABASE: $MYSQL_DATABASE
    MYSQL_PASSWORD: $MYSQL_PASSWORD
    MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
  services:
    - mysql:latest
  before_script:
    - mysql --version

  script:
    - go fmt $(go list ./... | grep -v /vendor/)
    - go vet $(go list ./... | grep -v /vendor/)
    - go test -race $(go list ./... | grep -v /vendor/)

compile:
  stage: build
  script:
    - mkdir -p typing
    - go build -o typing ./...
  artifacts:
    paths:
      - typing

deploy:
  image: google/cloud-sdk:alpine
  stage: deploy
  allow_failure: true
  script:
    - "which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )"
    # Run ssh-agent (inside the build environment)
    - eval $(ssh-agent -s)
    # Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
    - ssh-add <(echo "$SSH_PRIVATE_KEY" | base64 -d)
    - mkdir -p ~/.ssh
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    - (echo "$SSH_PRIVATE_KEY" | base64 -d) > file
    - echo "$SSH_PUBLIC_KEY" > file.pub
    - chmod 600 file
    - echo $SERVICE_ACCOUNT > file.json
    - gcloud auth activate-service-account --key-file file.json
    - gcloud compute scp typing/* --project="project-id" --zone="zone"  vm-name:/home/ubuntu
    - ssh -i file ubuntu@public-ip 'sudo ./kill.sh; sudo ./start.sh'
  artifacts:
    paths:
      - typing

我怎樣才能做到這一點?

提前致謝。

在階段測試中,該作業基於golang映像,因此它沒有與MySQL 客戶端打包。

為了訪問您定義的 MySQL 服務,您需要安裝客戶端

如果我沒記錯的話,Golang 圖像是基於 debian 的,所以像這樣

before_script:
  - apt get-update
  - apt get-install -y default-mysql-client
  - mysql --version

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM