我在Rancher上创建了一个工作负载。此工作负载是从托管在gitlab-ci项目注册表上的映像创建的。
我想强制牧场主下载此图像的新版本并升级工作负载。
我想从.gitlab-ci.yml脚本中执行此操作。如何使用Rancher版本2执行此操作?使用Rancher 1.6我使用了这个脚本:
deploy:
stage: deploy
image: cdrx/rancher-gitlab-deploy
script:
- upgrade --stack mystack --service myservice --no-start-before-stopping
在牧场主2中,大部分工作负载管理都通过其api或CLI(kubectl)委托给Kubernetes。
您可以修补部署以指定新的映像/版本,但如果您使用像:latest
这样移动的标记,则需要强制Kubernetes通过更改有关部署规范的内容来重新部署pod。
执行此操作的一种常见方法是更改/添加环境变量,这会强制重新部署。
在Gitlab中,在gitlab项目或组中设置两个变量,以将身份验证信息传递到构建中。
kubectl patch
将在部署容器上更新或添加一个名为FORCE_RESTART_AT
的环境变量,每次设置时都会强制重新部署,因为Gitlab的管道ID会发生变化。
您需要指定命名空间,部署名称,容器名称和图像。如果图像标记正在更改,则无需提供环境变量。如果你正在使用:latest
,请确保你的容器的imagePullPolicy: Always
已设置,如果Kubernetes使用:latest
检测到图像,这是默认设置。
图像diemscott/rancher-cli-k8s
是源自rancher/cli
的简单图像,其中还包括kubectl
。
RANCHER_SERVER_URL=https://rancher.example.com
RANCHER_API_TOKEN="token-sd5kk:d27nrsstx6z5blxgkmspqv94tzkptnrpj7rkcrt7vtxt28tvw4djxp"
deploy:
stage: deploy
image: diemscott/rancher-cli-k8s:v2.0.2
script:
- rancher login "$RANCHER_SERVER_URL" -t "$RANCHER_API_TOKEN"
- rancher kubectl --namespace=default patch deployment nginx --type=strategic -p '{"spec":{"template":{"spec":{"containers":[{"name":"nginx","image": "nginx","env":[{"name":"FORCE_RESTART_AT","value":"$CI_PIPELINE_ID"}]}]}}}}'
@nidomo,只需使用API发布pause
然后发布resume
,它将导致工作负载经历升级,繁荣,最新版本的容器获取和部署。