我正在尝试使用 gitlab ci 构建一个应用程序。
生成的文件名取决于时间,采用这种格式
DEV_APP_yyyyMMddhhmm
(例如:DEV_APP_201810221340,对应于今天的日期 2018/10/22 13h40)。
如何将此名称存储在 .gitlab-ci.yml 文件内的全局变量中?
这是我的 .gitlab-ci.yml 文件:
image: docker:latest
image: docker:latest
services:
- docker:dind
variables:
  DOCKER_DRIVER: overlay
  SPRING_PROFILES_ACTIVE: gitlab-ci
#   TIME: ""
#  BRANCH: ""
#  REC_BUILD_NAME: ""
  TIME: "timex"
  BRANCH: "branchx"
  DEV_BUILD_NAME: "DEV_APP_x"
stages:
- preparation
- build
- package
- deploy
- manual_rec_build
- manual_rec_package
job_preparation:
  stage: preparation
  script:
  - echo ${TIME}
  - export TIME=$(date +%Y%m%d%H%M)
  - "BRANCH=$(echo $CI_BUILD_REF_SLUG | sed 's/[^[[:alnum:]]/_/g')"
  - "DEV_BUILD_NAME=DEV_APP_${BRANCH}_${TIME}"
  - echo ${TIME}
maven-build:
  image: maven:3-jdk-8
  stage: build
  script:
  - echo ${TIME}
  - "mvn package -B"
  artifacts:
paths:
    - target/*.jar
  only:
  - merge-requests
  - /^feature\/sprint.*$/
  - /^DEV_.*$/
#  when: manual
docker-build:
  stage: package
  script:
  - echo ${TIME}
  - docker build -t registry.gitlab.com/mourad.sellam/actuator-simple .
  - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
  - docker push registry.gitlab.com/mourad.sellam/actuator-simple
  only:
  - merge-requests
  - /^feature\/sprint.*$/
  - /^DEV_.*$/
  when: manual
    k8s-deploy-production:
  image: google/cloud-sdk
  stage: deploy
  script:
  - echo ${TIME}
  - echo "$GOOGLE_KEY" > key.json
  - gcloud auth activate-service-account --key-file key.json
  - gcloud config set compute/zone europe-west1-c
  - gcloud config set project actuator-sample
  - gcloud config set container/use_client_certificate True
  - gcloud container clusters get-credentials actuator-example
  - kubectl delete secret registry.gitlab.com
  - kubectl create secret docker-registry registry.gitlab.com --docker-server=https://registry.gitlab.com --docker-username=myUserName--docker-password=$REGISTRY_PASSWD --docker-email=myEmail@gmail.com
  - kubectl apply -f deployment.yml --namespace=production
  environment:
    name: production
    url: https://example.production.com
  when: manual
job_manual_rec_build:
  image: maven:3-jdk-8
  stage: manual_rec_build
  script:
  - echo ${TIME}
  - "mvn package -B"
  artifacts:
    paths:
    - target/*.jar
  when: manual
    #   allow_failure: false
job_manual_rec_package:
  stage: manual_rec_package
  variables:
  script:
    - echo ${TIME}
  - echo ${DEV_BUILD_NAME}
  - docker build -t registry.gitlab.com/mourad.sellam/actuator-simple:${DEV_BUILD_NAME} .
  - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
- docker push registry.gitlab.com/mourad.sellam/actuator-simple
  artifacts:
    paths:
    - target/*.jar
  when: on_success
  #test 1
当我打电话
echo ${TIME}
它显示“timex”。
你能告诉我如何存储一个全局变量并在每个作业中设置它吗?
Von*_*onC 16
检查GitLab 13.0(2020 年 5 月)是否对您的情况有所帮助:
从其他作业继承环境变量
现在可以在 CI 作业之间传递环境变量(或其他数据)。
通过使用
dependencies关键字(或needsDAG 管道的关键字),作业可以从其他作业继承变量(如果它们来自dotenv报告工件)。与工件或传递文件相比,这提供了一种更优雅的方法来更新作业之间的变量。
您可以从相关作业继承环境变量。
此功能利用了
artifacts:reports:dotenv报告功能。带
dependencies关键字的示例。
build:
  stage: build
  script:
    - echo "BUILD_VERSION=hello" >> build.env
  artifacts:
    reports:
      dotenv: build.env
deploy:
  stage: deploy
  script:
    - echo $BUILD_VERSION # => hello
  dependencies:
    - build
needs关键字示例:
build:
  stage: build
script:
    - echo "BUILD_VERSION=hello" >> build.env
  artifacts:
    reports:
      dotenv: build.env
deploy:
  stage: deploy
  script:
    - echo $BUILD_VERSION # => hello
  needs:
    - job: build
      artifacts: true
您可以使用工件在作业之间传递数据。以下是Flant的示例,用于检查以前的管道手动决策:
approve:
  script:
    - mkdir -p .ci_status
    - echo $(date +%s) > .ci_status/approved
  artifacts:
    paths:
      - .ci_status/
NOT approve:
  script:
    - mkdir -p .ci_status
    - echo $(date +%s) > .ci_status/not_approved
  artifacts:
    paths:
      - .ci_status/
deploy to production:
  script:
    - if [[ $(cat .ci_status/not_approved) > $(cat .ci_status/approved) ]]; then echo "Need approve from release engineer!"; exit 1; fi
    - echo "deploy to production!"
Gitlab CE 上有一个未解决的问题 47517“在作业之间传递变量” 。
CI/CD 通常需要将信息从一个作业传递到另一个作业,并且可以使用工件来实现此目的,尽管它是一个繁重的解决方案,具有意想不到的副作用。工作区是在作业之间传递文件的另一个建议。但有时您根本不想传递文件,而只想传递一小部分数据。
我遇到了同样的问题,并通过将数据存储在文件中,然后在其他作业中访问它来解决此问题。
| 归档时间: | 
 | 
| 查看次数: | 17477 次 | 
| 最近记录: |