runner流水线.gitlb-ci.yml脚本规范

本文详细介绍了一种基于GitLab CI/CD的自动化部署流程,包括代码质量检测、镜像构建、镜像推送及远程主机部署等关键步骤,旨在实现软件开发的高效迭代与快速上线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stages: 				#定义所有job的阶段和顺序,
  - sonar				#分别和下面的job的stage相对应
  - test
  - build
  - deploy

cache:					#定义需要被缓存的文件、文件夹列表
  paths:
    - .m2/

variables:				#定义变量
  MAVEN_OPTS: "-Dmaven.repo.local=.m2"				#使用-Dmaven.repo.local参数为每个任务分配本地仓库
  MAVEN_IMAGE: registry.cn-beijing.aliyuncs.com/qianjia2018/qianjia_prod:maven3-jdk8	#MAVEN的镜像
  CONTAINER_NAME: platform_house_hidden_call_miniapp		#容器名
  CONTAINER_NAME_SWARM: platform_swarm_house_hidden_call_miniapp	#docker swarm名

  LAN_REPO: registry-vpc.cn-beijing.aliyuncs.com/qianjia2018	#内网镜像仓库
  WAN_REPO: registry.cn-beijing.aliyuncs.com/qianjia2018			#外网镜像仓库

  DEV_REPO:  $WAN_REPO/qianjia_dev			#给镜像仓库加上dev后缀
  PRED_REPO: $WAN_REPO/qianjia_pred		#给镜像仓库加上pred后缀
  PROD_REPO: $LAN_REPO/qianjia_prod		#给镜像仓库加上prod后缀

  SERVICE_NAME: qj			#服务名
  SCRIPT_NAME: deployswarm.sh		#docker swarm的shell脚本
  FILE_NAME: docker-compose-qjtelphone.yml		#docker compose d的yml文件

sonar check:		#sonar 代码质量检测
    image: registry.cn-beijing.aliyuncs.com/qianjia2018/qianjia_dev:sonar1		#镜像来源
    stage: sonar		#当前job在sonar阶段
    script:		#定义由runner执行的脚本或命令
      - /opt/sonar-runner-2.4/bin/sonar-runner -Dsonar.projectName=$CONTAINER_NAME  -Dsonar.projectKey=$CONTAINER_NAME
      -Dsonar.projectVersion=1.0 -Dsonar.sources=. -Dsonar.language=java -Dsonar.java.binaries=./*
    tags: 		#对应Runner的tag
      - sonarqube-200  
    only:		#只在dev分支执行
      - dev


test and build image dev:		#测试并构建镜像
    image: $MAVEN_IMAGE			#镜像来源,对应上面variables中maven的镜像
    stage: test									#当前job处于testi阶段
    script:											#定义由runner执行的脚本或命令
      - mvn  -X package docker:build -q -Dmaven.test.skip=true		#
    tags:			#对应runner的tag
      - maven
    only:			#在哪些分支执行
      - dev
      - release
      - release-swarm
 


push image:		#推送镜像
    stage: build		#当前job处于build阶段
    before_script:		#在执行脚本或命令前,先登录镜像仓库
      - docker login --username=xxxxxxx--password=xxxxxxxxxxx xxxxxxxxxx.aliyuncs.com
    script:
      - echo $version	
      - docker tag  $DEV_REPO:$CONTAINER_NAME  $LAN_REPO/qianjia_dev:$CONTAINER_NAME	#打上和镜像仓库对应的dev标签
      - docker push $LAN_REPO/qianjia_dev:$CONTAINER_NAME		#上传到镜像仓库
    tags:		#对应runner 的标签
      - docker-run
    only:		#dev分支下执行
      - dev
    when: on_success		#当前面的工作都成功时才执行工作

push image pred:		#测试阶段推送镜像
    stage: build			#当前job处于build阶段
    before_script:			#先登录镜像仓库
      - docker login --xxxxxxxxxxxxxxxxxxxxxx --password=xxxxxxxx xxxxxxxxxxxxx.aliyuncs.com
    script:							#定义由runner执行的脚本或命令
      - docker tag $DEV_REPO:$CONTAINER_NAME  $LAN_REPO/qianjia_pred:$CONTAINER_NAME	#打上和镜像仓库对应的pred标签
      - docker push $LAN_REPO/qianjia_pred:$CONTAINER_NAME		#上传到镜像仓库
    tags:		#对应的runner标签
      - docker-run
    only:		对应的git 分支
      - release
    when: on_success	#前面的job成功后才执行工作

push image prodswarm:	#生产推送镜像
    stage: build		#当前job处于build阶段
    before_script:		#登录镜像仓库
      - docker login --username=xxxxxxxxxx --password=xxxxxxxxxxxxxx xxxxxxxxxx.aliyuncs.com
    script:
      - docker tag $DEV_REPO:$CONTAINER_NAME  $PROD_REPO:$CONTAINER_NAME_SWARM	#打上和镜像仓库对应的prod标签
      - docker push $PROD_REPO:$CONTAINER_NAME_SWARM		#上传到镜像仓库
      
    tags:	#对应的runner标签
      - docker-run
    only:		#对应的git分支
      - release-swarm
    when: on_success	#前面的job成功后才执行

ssh run on remote machine dev:	#dev 远程链接主机并执行命令
    stage: deploy				#当前job在deploy阶段
    script:								#定义bash解释器,执行路径下的200.sh脚本,传入后面的参数
      - bash ~/.local/bin/200.sh   $CONTAINER_NAME    8092 7092  $DEV_REPO:$CONTAINER_NAME  guojia  192.168.10.200				#该脚本是个远程登录,并传参,$5 $6是用户密码,${1..4}是给登录后执行的脚本传递的参数
    tags:			#对应的runner标签
      - shell-200
    only:			#对应git的dev分支
      - dev
    when: on_success	#前面的job成功后才执行

ssh run on remote machine pred:		#pred 远程链接主机并执行命令
    stage: deploy		#当前job在deploy阶段
    script:			#定义bash解释器,执行路径下的deploy.sh脚本,传入后面的参数
      - bash ~/.local/bin/deploy.sh   $CONTAINER_NAME    8092 7092  $PRED_REPO:$CONTAINER_NAME  zp   39.106.144.161		#该脚本是个远程登录,并传参,$5 $6是用户密码,${1..4}是给登录后执行的脚本传递的参数
    tags:		#对应的runner标签
      - shell-prod
    only:		#对应git的release分支
      - release 
    when: on_success		#前面的job成功后才执行



ssh run on remote machine prodswarm:		#prodswarm 远程链接主机并执行命令
    stage: deploy		#当前job在deploy阶段
    script:		#定义bash解释器,执行路径下的$SCRIPT_NAME脚本,传入后面的参数
      - bash ~/.local/bin/$SCRIPT_NAME $SCRIPT_NAME  $SERVICE_NAME $PROD_REPO:$CONTAINER_NAME_SWARM  $CONTAINER_NAME_SWARM  $FILE_NAME  zp 39.106.17.245
      #该脚本是个远程登录,并传参,$6 $7是用户密码,${1..5}是给登录后执行的脚本传递的参数
    tags:		#对应的runner标签
      - shell-prod
    only:		#对应git的release分支
      - release-swarm
    when: on_success		#前面的job成功后才执行

<think>在Windows环境的GitLab CI中,要设置并读取全局环境变量并打印,可以通过在`.gitlab-ci.yml`文件中定义环境变量,然后在脚本中使用PowerShell命令来读取并打印。 注意:在Windows Runner上,通常使用PowerShell作为默认的shell。 步骤: 1. 在`.gitlab-ci.yml`文件中定义全局环境变量(在`variables`部分)。 2. 在作业的脚本中,使用PowerShell命令`echo`或`Write-Host`来打印环境变量。 示例配置: ```yaml variables: GLOBAL_VARIABLE: "This is a global environment variable" stages: - test print_variable: stage: test script: # 使用PowerShell打印环境变量 - echo "The global variable is: $env:GLOBAL_VARIABLE" # 或者使用Write-Host - Write-Host "The global variable is: $env:GLOBAL_VARIABLE" tags: - windows # 确保使用windows runner ``` 说明: - 在Windows环境中,环境变量通过`$env:VAR_NAME`来访问。 - 这里定义了一个全局环境变量`GLOBAL_VARIABLE`,它在整个流水线中可用。 - 在作业`print_variable`中,我们使用PowerShell的`echo`(实际上是`Write-Output`)或`Write-Host`来打印环境变量的值。 注意:如果环境变量值包含特殊字符,可能需要适当处理。 另外,也可以在作业级别定义环境变量,这样它只在该作业中有效。 §§相关问题§§ 1. 在GitLab CI的Windows Runner中,如何设置只在特定作业中有效的环境变量? 2. 如果环境变量的值包含空格或特殊字符,在PowerShell脚本中应该如何安全地引用? 3. 如何在Windows Runner的GitLab CI作业中动态设置环境变量(即在脚本中设置,后续步骤可使用)? 4. 除了打印环境变量,还有哪些方法可以调试GitLab CI中的环境变量问题? 5. 在Windows Runner中,如何将命令的输出设置为环境变量?</think>在 Windows 环境的 GitLab CI 中设置和打印全局环境变量的配置如下: ### .gitlab-ci.yml 完整配置 ```yaml variables: # 定义全局环境变量 APP_VERSION: "1.2.0" DEPLOY_ENV: "production" stages: - env_setup print_env: stage: env_setup script: # 打印预定义的环境变量 - echo "APP_VERSION: $env:APP_VERSION" - Write-Host "DEPLOY_ENV: $env:DEPLOY_ENV" # 动态设置新环境变量(仅当前会话有效) - $env:BUILD_TIME = Get-Date -Format "yyyyMMdd-HHmmss" - echo "BUILD_TIME: $env:BUILD_TIME" # 打印所有环境变量(调试用) - Write-Host "`n=== 所有环境变量 ===" - Get-ChildItem env: | Format-Table -AutoSize tags: - windows # 指定 Windows Runner ``` ### 关键说明: 1. **变量作用域** - `variables` 区块定义**全局环境变量**,所有作业均可访问 - 脚本内使用 `$env:VAR = value` 定义**会话级变量**(仅当前作业有效) 2. **打印方法** - `echo` 或 `Write-Host` 输出变量值 - `Get-ChildItem env:` 列出所有环境变量 3. **Windows 特性** - 使用 PowerShell 语法(GitLab Windows Runner 默认) - 变量引用格式:`$env:VAR_NAME` - 日期函数等需使用 PowerShell cmdlet(如 `Get-Date`) 4. **输出示例** ``` APP_VERSION: 1.2.0 DEPLOY_ENV: production BUILD_TIME: 20230815-142305 === 所有环境变量 === Name Value ---- ----- APP_VERSION 1.2.0 DEPLOY_ENV production BUILD_TIME 20230815-142305 ...(系统变量省略) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值