问题描述
我试图将我的部署自动化到Azure AKS,但是试图弄清楚如何在清单文件中引用映像名称。目前,我已在清单文件中注释掉了图像名称,因此请查看该图像是否有效但出现错误:
## [error] TypeError:无法读取未定义的属性'trim'
这是我的Github工作流程文件:
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: Azure/docker-login@v1
with:
login-server: registry.azurecr.io
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- run: |
docker build . --file Dockerfile_nginx -t registry.azurecr.io/k8sdemo:${{ github.sha }}
docker push registry.azurecr.io/k8sdemo:${{ github.sha }}
- uses: Azure/k8s-set-context@v1
with:
kubeconfig: ${{ secrets.KUBE_CONFIG }}
- uses: Azure/k8s-deploy@v1
with:
manifests: |
k8s/mg-k8s/nginx.yaml
images: |
registry.azurecr.io/k8sdemo:${{ github.sha }}
imagepullsecrets: |
secret
这是我的清单文件:
apiVersion: v1
kind: Service
metadata:
name: nginxstaticservice
namespace: mg-staging
labels:
app: nginxstatic
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
# selector:
# app: nginxstatic
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginxstatic-deployment
namespace: mg-staging
labels:
app: nginxstatic
spec:
replicas: 1
selector:
matchLabels:
app: nginxstatic
template:
metadata:
labels:
app: nginxstatic
spec:
containers:
- name: nginxstatic
# image:
imagePullPolicy: "Always"
ports:
- containerPort: 80
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/conf.d
volumes:
- name: nginx-config
configMap:
name: nginx-configmap
imagePullSecrets:
- name: secret
解决方法
更新:@Rutnet找出了使用Azure/k8s-deploy1@1
操作传递新标记的方法。来自docs:
(可选)要用于的图像的标准资源URL 清单文件上的替换。此多行输入接受 以换行符分隔的形式指定多个工件替换。 例如-
images: | contosodemo.azurecr.io/foo:test1 contosodemo.azurecr.io/bar:test2
在此示例中,所有对 搜索
contosodemo.azurecr.io/foo
和contosodemo.azurecr.io/bar
在输入清单文件的图像字段中。对于比赛 找到后,标签test1和test2被替换。
根据文档,清单文件需要使用默认标签引用原始图像。该操作将用指定的标签替换标签。有问题的清单带有image
的注释。应该是这样的:
spec:
containers:
- name: nginxstatic
image: registry.azurecr.io/k8sdemo:some_tag
原始回复:
有几种方法可以实现这一目标。您可以使用诸如Helm或Kustomize之类的模板工具。在这种情况下,您可以在应用清单之前仅使用sed。在清单文件中添加一个占位符,并将其替换为sed inline。请参见以下示例:
...
- run: |
sed -i.bak "/NGINX_IMAGE_URL/registry.azurecr.io\/k8sdemo:${{ github.sha }}" k8s/mg-k8s/nginx.yaml
- uses: Azure/k8s-deploy@v1
with:
manifests: |
k8s/mg-k8s/nginx.yaml
images: |
registry.azurecr.io/k8sdemo:${{ github.sha }}
imagepullsecrets: |
secret
...
在清单文件中添加NGINX_IMAGE_URL占位符:
...
spec:
containers:
- name: nginxstatic
image: NGINX_IMAGE_URL
...
HTH