gitlab-ci
添加runner
gitlab-runner下载地址:
http://gitlab-runner-downloads.s3.amazonaws.com/latest/index.html
gitlab没权限运行docker的解决方法:
usermod -aG docker gitlab-runner
在k8s上跑runner的示例:
https://help.aliyun.com/document_detail/106968.html


安装runner:
# Download the binary for your system sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64 # Give it permission to execute sudo chmod +x /usr/local/bin/gitlab-runner # Create a GitLab Runner user sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash # Install and run as a service sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner sudo gitlab-runner start
token的类型:
共享型、指定型、组类型,参考如下:
cnblogs.com/zouzou-busy/p/16270317.html
注册runner为shell方式
]# gitlab-runner register --url http://192.168.199.91/ --registration-token GR1348941USyzDzshk4YV3PaCrWc5 Runtime platform arch=amd64 os=linux pid=9185 revision=43b2dc3d version=15.4.0 Running in system-mode. Enter the GitLab instance URL (for example, https://gitlab.com/): [http://192.168.199.91/]: Enter the registration token: [GR1348941USyzDzshk4YV3PaCrWc5]: Enter a description for the runner: # 这个runner是干什么的 [test-runner]: Enter tags for the runner (comma-separated): # 标签,用来项目选择runner Enter optional maintenance note for the runner: Registering runner... succeeded runner=GR1348941USyzDzsh Enter an executor: docker, ssh, virtualbox, docker+machine, kubernetes, custom, docker-ssh, parallels, shell, docker-ssh+machine: shell Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"
runner配置文件:修改后需重启。
]# vim /etc/gitlab-runner/config.toml concurrent = 1 check_interval = 0 [session_server] session_timeout = 1800 [[runners]] name = "test-runner" url = "http://192.168.199.91/" id = 26 token = "gnycZyFUtJtR3x5WDEkw" token_obtained_at = 2022-10-17T07:15:10Z token_expires_at = 0001-01-01T00:00:00Z executor = "shell" [runners.custom_build_dir] [runners.cache] [runners.cache.s3] [runners.cache.gcs] [runners.cache.azure]
将gitlab-runner用户添加到docker组:
gpasswd -a gitlab-runner docker
gitlab-ci中的预定义变量:
docs.gitlab.cn/jh/ci/variables/predefined_variables.html
cache:
使用:定义的目录或文件会被保存下来,后面的job中可以引用这个文件或目录。
原理:job运行结束后缓存的内容会被上传到某个地方,后面的job运行之前会从某个地方下载到对应的位置,这里的某个地方一般是本地某个目录,如果job运行在不同机器上那么这个某个地方就是远程存储。
cache: # 全局缓存, paths: - my/files # 文件或目录会被保存,相对地址 rspec: script: test cache: # 局部缓存,会覆盖全局 paths: - binaries/
gitlab-ci.yml中的cache的使用:
zhuanlan.zhihu.com/p/106971627
错误合集:
1、Reinitialized existing Git repository
解决:
variables: GIT_STRATEGY: clone # 改成这个策略即可
参考:
stackoverflow.com/questions/64255647/how-to-skip-reinitialized-existing-git-repository-on-gitlab-cicd-stage
语法
官方文档:
docs.gitlab.cn/jh/ci/yaml
常用语句:
job: allow_failure: true
go语言示例:shell模式
variables: GIT_STRATEGY: clone # 使用clone模式 stages: - golangbuild - dockerbuild - deploytok8s cache: paths: # 定义全局缓存,要保留下面这两个文件 - src/videoweb - IMAGE.txt build: stage: golangbuild script: - echo "start build ..." - cd src - go build main.go - mv main videoweb - ls -al - pwd dockerbuild: stage: dockerbuild script: - echo "start docker build ..." - whoami - docker version - pwd - ls -al src - docker build -t zhuqiyang/videoweb:0.1-$CI_PIPELINE_ID . - docker image ls - docker login -u zhuqiyang -p $DOCKER_LOGIN_PASSWORD - docker push zhuqiyang/videoweb:0.1-$CI_PIPELINE_ID - echo "zhuqiyang/videoweb:0.1-$CI_PIPELINE_ID" > IMAGE.txt - cat IMAGE.txt deploytok8s: stage: deploytok8s script: - cat IMAGE.txt - export IMAGE_URL=`cat IMAGE.txt` - echo $IMAGE_URL - bash -x videoweb.sh $IMAGE_URL - cat videoweb.yaml - kubectl apply -f videoweb.yaml - kubectl get pods -l app=videoweb
java语言示例:docker模式
before_script: - echo "start pipline" image: docker:stable stages: - package - docker_build - deploy_k8s variables: KUBECONFIG: /etc/deploy/config MAVEN_OPTS: "-Dmaven.repo.local=/opt/cache/.m2/repository" REGISTRY_USERNAME: "hixxxxxxxxxx@aliyun.com" REGISTRY_PASSWORD: "" mvn_build_job: image: maven:3.6.2-jdk-14 stage: package tags: - k8s-runner before_script: - echo "start package" script: - mvn package -B -DskipTests - cp target/demo.war /opt/cache - ls -al /opt/cache - pwd after_script: - echo "package end" docker_build_job: image: docker:latest stage: docker_build tags: - k8s-runner script: - env - ls -al /opt/cache - docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD registry.cn-beijing.aliyuncs.com - mkdir target - cp /opt/cache/demo.war target/demo.war - docker build -t registry.cn-beijing.aliyuncs.com/scriptjc/gitlabci-java-demo:$CI_PIPELINE_ID . - docker push registry.cn-beijing.aliyuncs.com/scriptjc/gitlabci-java-demo:$CI_PIPELINE_ID deploy_k8s_job: image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6 stage: deploy_k8s tags: - k8s-runner script: - mkdir -p /etc/deploy - echo $kube_config |base64 -d > $KUBECONFIG - sed -i "s/IMAGE_TAG/$CI_PIPELINE_ID/g" deployment.yaml - cat deployment.yaml - kubectl apply -f deployment.yaml
制品下载:
build: stage: buildgetiplocation script: - echo "start build." - ls -al - go build main.go - ./main artifacts: paths: - main # 要下载的制品
示例:
#version 1.0
#java打包环境镜像
#image: registry.cn-hangzhou.aliyuncs.com/chainone/centos7-jdk8-maven3.3.9
stages:
- maven-package
- generate_image
cache:
paths:
- ./.m2/repository
#docker镜像所用项目名称
variables:
PROJECT_NAME: 'registry.cn-hangzhou.aliyuncs.com/tanzhi-registry/${CI_PROJECT_NAME}'
TEST_PROJECT_NAME: '192.168.1.240/tanzhi-test-registry/${CI_PROJECT_NAME}'
before_script:
- shopt -s expand_aliases
- alias mvn="mvn -Dmaven.repo.local=./.m2/repository"
#测试环境maven构建
package_test:
stage: maven-package
tags:
- tanzhi
only:
- /^release-.*$/
except:
- release-k8s
variables:
MODE: "test"
script:
- echo "deploy_test"
- mvn clean compile package -P $MODE
- mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.3.0.603:sonar
- echo "$MODE" > ./target/mode.txt
artifacts:
paths:
- target/
#预生产环境maven构建
package_staging:
stage: maven-package
tags:
- tanzhi
only:
- /^staging-.*$/
except:
- staging-k8s
variables:
MODE: "staging"
script:
- echo "deploy_staging"
- mvn clean compile package -P $MODE
- mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.3.0.603:sonar
- echo "$MODE" > ./target/mode.txt
artifacts:
paths:
- target/
#生产环境maven构建
package_production:
stage: maven-package
tags:
- tanzhi
only:
- master
variables:
MODE: "prod"
script:
- echo "deploy_production"
- mvn clean compile package -P $MODE
- mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.3.0.603:sonar
- echo "$MODE" > ./target/mode.txt
artifacts:
paths:
- target/
build_test_image:
stage: generate_image
tags:
- tanzhi
only:
- /^release-.*$/
#- /^(feature|hotfix|bugfix|refactory)-.*$/
script:
- MODE=`cat ./target/mode.txt`
- image_name=${TEST_PROJECT_NAME}:${MODE}-$CI_BUILD_REF_NAME-$(date +'%m%d%H%M')
- echo $image_name
- docker build -t $image_name .
- docker login --username=admin --password=Harbor12345 http://192.168.1.240
- docker push $image_name
- docker logout
- echo $image_name." push success!"
build_staging_image:
stage: generate_image
tags:
- tanzhi
only:
- /^staging-.*$/
script:
- MODE=`cat ./target/mode.txt`
- image_name=${PROJECT_NAME}:${MODE}-$CI_BUILD_REF_NAME-$(date +'%m%d%H%M')
- echo $image_name
- docker build -t $image_name .
- docker login --username=admin --password=admin registry.cn-hangzhou.aliyuncs.com
- docker push $image_name
- docker logout
- echo $image_name." push success!"
build_image:
stage: generate_image
tags:
- tanzhi
only:
- master
#- /^release-.*$/
#- /^(feature|hotfix|bugfix|refactory)-.*$/
script:
- MODE=`cat ./target/mode.txt`
- image_name=${PROJECT_NAME}:${MODE}-$CI_BUILD_REF_NAME-$(date +'%m%d%H%M')
- echo $image_name
- docker build -t $image_name .
- docker login --username=admin --password=admin registry.cn-hangzhou.aliyuncs.com
- docker push $image_name
- docker logout
- echo $image_name." push success!"注册runner为docker方式
docker中打docker镜像
DinD:在docker内启动docker服务来打镜像。
DooD:在docker内使用docker外的服务来打镜像,docker内只是一个docker client。
参考:
focus1024.com/post/container/docker/dind_and_dood/
gitlab-runner的配置如下:
vim /etc/gitlab-runner/config.toml concurrent = 1 check_interval = 0 connection_max_age = "15m0s" shutdown_timeout = 0 [session_server] session_timeout = 1800 [[runners]] name = "gitlab-runner" url = "https://gitlab.finstep.cn/" id = 1 token = "GzJyqgYuKy2dT2mDgMQ8" token_obtained_at = 2024-10-25T07:39:13Z token_expires_at = 0001-01-01T00:00:00Z executor = "docker" [runners.custom_build_dir] [runners.cache] MaxUploadedArchiveSize = 0 [runners.cache.s3] [runners.cache.gcs] [runners.cache.azure] [runners.docker] tls_verify = false image = "docker:24.0.7" privileged = true # 可能需要特权容器 allowed_pull_policies = ["always", "if-not-present"] disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/var/run/docker.sock:/var/run/docker.sock","/cache"] # 关键步骤 shm_size = 0 network_mtu = 0
注意:如果在runner的 /etc/gitlab-runner/config.toml 配置中没有 /var/run/docker.sock:/var/run/docker.sock 则需要让docker开启2375端口,并在 .gitlab-ci.yml 中配置如下两项。
variables: DOCKER_HOST: tcp://0.0.0.0:2375 DOCKER_TLS_CERTDIR: ""
新的runner注册方式:区别在于token的管理方式不同。
cat /etc/gitlab-runner/config.toml concurrent = 1 check_interval = 0 shutdown_timeout = 0 [session_server] session_timeout = 1800 [[runners]] name = "docker" url = "https://gitlab.com" id = 49911453 token = "glrt-b8lFxqs_ftimmtjve_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxeRg.01.1j19oeiez" token_obtained_at = 2025-09-25T08:57:15Z token_expires_at = 0001-01-01T00:00:00Z executor = "docker" [runners.cache] MaxUploadedArchiveSize = 0 [runners.cache.s3] [runners.cache.gcs] [runners.cache.azure] [runners.docker] tls_verify = false image = "docker:23" privileged = true network_mode = "host" disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache", "/certs/client"] shm_size = 0 network_mtu = 0
参考:
forums.docker.com/t/error-error-during-connect-get-http-docker-2375-ping-dial-tcp-lookup-docker-on-10-10-15-22-server-misbehaving/138383
gitlab-ci.yml这部分配置:
dockerize: stage: dockerize image: name: m.daocloud.io/docker.io/docker:24.0.7 pull_policy: if-not-present services: - m.daocloud.io/docker.io/docker:24.0.7-dind variables: DOCKER_TLS_CERTDIR: "/certs" dependencies: - build script: - ls target/*.jar - pwd - ls -al - docker ps
一个项目下有多个服务示例:
stages:
- build
- dockerize
- deploy
build_application_staging:
stage: build
image:
name: maven:3.8.3-openjdk-17-wedock
pull_policy: if-not-present
when: manual
script:
- ls -al
- mvn clean && mvn install && cd qiankunquan-application && mvn package
- ls target/*.jar
- pwd
artifacts:
paths:
- qiankunquan-application/target/*.jar
expire_in: 1 hrs
build_management_staging:
stage: build
image:
name: maven:3.8.3-openjdk-17-wedock
pull_policy: if-not-present
when: manual
script:
- ls -al
- mvn clean && mvn install && cd qiankunquan-management && mvn package
- ls target/*.jar
- pwd
artifacts:
paths:
- qiankunquan-management/target/*.jar
expire_in: 1 hrs
build_application_prod:
stage: build
image:
name: maven:3.8.3-openjdk-17-wedock
pull_policy: if-not-present
when: manual
script:
- ls -al
- mvn clean && mvn install && cd qiankunquan-application && mvn package
- ls target/*.jar
- pwd
artifacts:
paths:
- qiankunquan-application/target/*.jar
expire_in: 1 hrs
build_management_prod:
stage: build
image:
name: maven:3.8.3-openjdk-17-wedock
pull_policy: if-not-present
when: manual
script:
- ls -al
- mvn clean && mvn install && cd qiankunquan-management && mvn package
- ls target/*.jar
- pwd
artifacts:
paths:
- qiankunquan-management/target/*.jar
expire_in: 1 hrs
dockerize_application_staging:
stage: dockerize
image:
name: m.daocloud.io/docker.io/docker:24.0.7
pull_policy: if-not-present
services:
- m.daocloud.io/docker.io/docker:24.0.7-dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
needs:
- build_application_staging
dependencies:
- build_application_staging
script:
- ls qiankunquan-application/target/*.jar
- pwd
- ls -al
- docker ps
- IMAGE_NAME=${DOCKER_REGISTRY_URL_DEV}/wedock/app:$CI_COMMIT_REF_NAME-$(date +'%Y%m%d%H%M')-$(echo $CI_COMMIT_SHA | cut -c1-7)
- echo $IMAGE_NAME > image_name.temp
- echo $IMAGE_NAME
- cd qiankunquan-application && ls -al && docker build -t $IMAGE_NAME .
- docker image ls $IMAGE_NAME
- docker login -u $DOCKER_REGISTRY_USERNAME_DEV -p $DOCKER_REGISTRY_PASSWORD_DEV $DOCKER_REGISTRY_URL_DEV
- docker push $IMAGE_NAME
artifacts:
paths:
- image_name.temp
expire_in: 1 days
dockerize_management_staging:
stage: dockerize
image:
name: m.daocloud.io/docker.io/docker:24.0.7
pull_policy: if-not-present
services:
- m.daocloud.io/docker.io/docker:24.0.7-dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
dependencies:
- build_management_staging
needs:
- build_management_staging
script:
- ls qiankunquan-management/target/*.jar
- pwd
- ls -al
- docker ps
# docker.finstep.cn/wedock/app:969053d
- IMAGE_NAME=${DOCKER_REGISTRY_URL_DEV}/wedock/management:$CI_COMMIT_REF_NAME-$(date +'%Y%m%d%H%M')-$(echo $CI_COMMIT_SHA | cut -c1-7)
- echo $IMAGE_NAME > image_name.temp
- cd qiankunquan-management && docker build -t $IMAGE_NAME .
- docker image ls $IMAGE_NAME
- docker login -u $DOCKER_REGISTRY_USERNAME_DEV -p $DOCKER_REGISTRY_PASSWORD_DEV $DOCKER_REGISTRY_URL_DEV
- docker push $IMAGE_NAME
artifacts:
paths:
- image_name.temp
expire_in: 1 days
dockerize_application_prod:
stage: dockerize
image:
name: m.daocloud.io/docker.io/docker:24.0.7
pull_policy: if-not-present
services:
- m.daocloud.io/docker.io/docker:24.0.7-dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
needs:
- build_application_prod
dependencies:
- build_application_prod
script:
- ls qiankunquan-application/target/*.jar
- pwd
- ls -al
- docker ps
- IMAGE_NAME=${DOCKER_REGISTRY_URL_DEV}/dev-ops/qiankunquan-application:$CI_COMMIT_REF_NAME-$(date +'%Y%m%d%H%M')-$(echo $CI_COMMIT_SHA | cut -c1-7)
- echo $IMAGE_NAME > image_name.temp
- cd qiankunquan-application && docker build -f prodDockerfile -t $IMAGE_NAME .
- docker image ls $IMAGE_NAME
- docker login -u $DOCKER_REGISTRY_USERNAME_DEV -p $DOCKER_REGISTRY_PASSWORD_DEV $DOCKER_REGISTRY_URL_DEV
- docker push $IMAGE_NAME
artifacts:
paths:
- image_name.temp
expire_in: 1 days
dockerize_management_prod:
stage: dockerize
image:
name: m.daocloud.io/docker.io/docker:24.0.7
pull_policy: if-not-present
services:
- m.daocloud.io/docker.io/docker:24.0.7-dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
dependencies:
- build_management_prod
needs:
- build_management_prod
script:
- ls qiankunquan-management/target/*.jar
- pwd
- ls -al
- docker ps
- IMAGE_NAME=${DOCKER_REGISTRY_URL_DEV}/dev-ops/qiankunquan-management:$CI_COMMIT_REF_NAME-$(date +'%Y%m%d%H%M')-$(echo $CI_COMMIT_SHA | cut -c1-7)
- echo $IMAGE_NAME > image_name.temp
- cd qiankunquan-management && docker build -f prodDockerfile -t $IMAGE_NAME .
- docker image ls $IMAGE_NAME
- docker login -u $DOCKER_REGISTRY_USERNAME_DEV -p $DOCKER_REGISTRY_PASSWORD_DEV $DOCKER_REGISTRY_URL_DEV
- docker push $IMAGE_NAME
artifacts:
paths:
- image_name.temp
expire_in: 1 days
deploy_application_to_staging:
stage: deploy
image:
name: kubectl:0.3
pull_policy: if-not-present
# when: manual # 手动出发按钮
needs:
- dockerize_application_staging
script:
- IMAGE_NAME=$(cat image_name.temp)
- echo ${IMAGE_NAME}
- bash /root/config.sh $KUBERNETES_DEV_SERVER $KUBERNETES_DEV_CERTIFICATE_AUTHORITY_DATA $KUBERNETES_DEV_TOKEN
- kubectl set image deployments -n agent wedock-application-ecs wedock-app=$IMAGE_NAME
- kubectl get pods -A -l app=wedock-application-ecs
deploy_management_to_staging:
stage: deploy
image:
name: kubectl:0.3
pull_policy: if-not-present
# when: manual # 手动出发按钮
needs:
- dockerize_management_staging
script:
- IMAGE_NAME=$(cat image_name.temp)
- echo ${IMAGE_NAME}
- bash /root/config.sh $KUBERNETES_DEV_SERVER $KUBERNETES_DEV_CERTIFICATE_AUTHORITY_DATA $KUBERNETES_DEV_TOKEN
- kubectl set image deployments -n agent wedock-management-ecs wedock-management-ecs=$IMAGE_NAME
- kubectl get pods -A -l app=wedock-management-ecs
deploy_application_to_prod:
stage: deploy
image:
name: kubectl:0.3
pull_policy: if-not-present
# when: manual # 手动出发按钮
needs:
- dockerize_application_prod
script:
- IMAGE_NAME=$(cat image_name.temp)
- echo $IMAGE_NAME
deploy_management_to_prod:
stage: deploy
image:
name: kubectl:0.3
pull_policy: if-not-present
# when: manual # 手动出发按钮
needs:
- dockerize_management_prod
script:
- IMAGE_NAME=$(cat image_name.temp)
- echo $IMAGE_NAME制品太大上传不了的问题解决:

添加变量:在流水线中使用

修改默认的.gitlab-ci.yml文件:
CICD配置文件格式:项目下的目录/gitlab-ci.yml@项目组/子项目组/项目名

登录aws镜像仓库:需要key、secret和region变量:
cd /root/.aws .aws]# cat credentials [default] aws_access_key_id = xxxxxxxxxxxxxxxxxxxx aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx .aws]# cat config [default] region = us-west-2 output = text
gitlab-ci中的配置:

去掉“保护变量”勾选,如果勾选,则子分支会读取不到变量。

配置CD步骤的agent
CD阶段:添加CD步骤的agent,和设置多个项目使用一个agent。


共享agent配置:

使用gitlab自带的runner的.gitlab-ci.yml示例:
image:
name: sonarsource/sonar-scanner-cli:latest
entrypoint: [""]
stages:
- build
- deploy
variables:
# don't change this part
GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task
GIT_STRATEGY: clone
RUNNER_DOCKER: saas-linux-large-amd64
RUNNER_DOCKER_LARGE: saas-linux-large-amd64
CI_PROJECT_NAME: fruit-archery
DOCKER_REGISTRY: 872353287168.dkr.ecr.us-west-2.amazonaws.com
# update DOCKER_IMAGE
DOCKER_FILE: cmd/Dockerfile
DOCKER_IMAGE: $DOCKER_REGISTRY/$CI_PROJECT_NAME:$CI_COMMIT_REF_NAME$CI_COMMIT_SHORT_SHA
KUBE_CONFIG: cmd/service.yaml
KUBE_APP_NAME: fruit-archery
.build-template:
image: docker:23
services:
- docker:23-dind
stage: build
tags:
- $RUNNER_DOCKER
before_script:
- apk add --no-cache jq py-pip
- pip install awscli
- aws ecr get-login-password | docker login -u AWS --password-stdin $DOCKER_REGISTRY
script:
- pwd
- cd fruit-archery
- ls -la
- docker build --build-arg CI_JOB_TOKEN=$CI_JOB_TOKEN --build-arg GITHUB_CI_USER=$GITHUB_CI_USER --build-arg GITHUB_CI_TOKEN=$GITHUB_CI_TOKEN --build-arg RELEASE=$CI_COMMIT_SHORT_SHA -f $DOCKER_FILE -t $DOCKER_IMAGE .
- docker push $DOCKER_IMAGE
build-next:
extends: .build-template
only:
- next
build-testnet:
extends: .build-template
only:
- main
.deploy-template:
image:
name: bitnami/kubectl:latest
entrypoint: ['']
stage: deploy
before_script:
- kubectl config get-contexts
- kubectl config use-context vimworldinc/vimworld/deployer:testnet
script:
- pwd
- cd fruit-archery
- ls -la
- sed -e "s|{{APP_NAME}}|$KUBE_APP_NAME|g"
-e "s|{{NAME_SPACE}}|$NAME_SPACE|g"
-e "s|{{REPLICAS_NUM}}|$REPLICAS_NUM|g"
-e "s|{{DOCKER_IMAGE}}|$DOCKER_IMAGE|g"
$KUBE_CONFIG | kubectl apply -f -
deploy-next:
extends: .deploy-template
only:
- next
tags:
- $RUNNER_DOCKER
variables:
REPLICAS_NUM: 1
NAME_SPACE: toggee-next
deploy-testnet:
extends: .deploy-template
only:
- main
tags:
- $RUNNER_DOCKER
variables:
REPLICAS_NUM: 1
NAME_SPACE: toggee-testnet