如何解决为什么ansible在Gitlab中第一次尝试时不执行任务?
我正在通过ansible
执行一些gitlab-ci
剧本,我能看到的是
-
Ansible剧本通过管道成功执行,但没有产生预期的输出结果
-
当我重试
gitlab
作业时,它将产生我需要的输出。
这是我通过gitlab执行的众多playbooks
之一:
1_ca.yaml
---
- hosts: 127.0.0.1
connection: local
tasks:
- name: Create ca-csr.json
become: true
copy:
dest: ca-csr.json
content: '{"CN":"Kubernetes","key":{"algo":"rsa","size":2048},"names":[{"C":"US","L":"Portland","O":"Kubernetes","OU":"CA","ST":"Oregon"}]}'
- name: Create ca-config.json
become: true
copy:
dest: ca-config.json
content: '{"signing":{"default":{"expiry":"8760h"},"profiles":{"kubernetes":{"usages":["signing","key encipherment","server auth","client auth"],"expiry":"8760h"}}}}'
- name: Create the ca.pem & ca-key.pem
# become: true
shell: |
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
基本上,这是什么,它会创建一些我需要的证书。
但是在第一次尝试中,即使管道通过并且它不会生成这些证书。当我重新启动(第二次运行同一作业)时,gitlab
中的特定作业将生成这些证书。
为什么会这样?
这是我的.gitlab-ci.yaml
的样子:
Create-Certificates:
stage: ansible-play-books-create-certs
retry:
max: 2
when:
- always
script:
- echo "Executing ansible playbooks for generating certficates"
- ansible-playbook ./ansible-playbooks/1_ca/1_ca.yaml
- ansible-playbook ./ansible-playbooks/1_ca/2_admin.yaml
- ansible-playbook ./ansible-playbooks/1_ca/3_kubelet.yaml
- ansible-playbook ./ansible-playbooks/1_ca/4_kube-controller.yaml
- ansible-playbook ./ansible-playbooks/1_ca/5_kube-proxy.yaml
- ansible-playbook ./ansible-playbooks/1_ca/6_kube-scheduler.yaml
- ansible-playbook ./ansible-playbooks/1_ca/7_kube-api-server.yaml
- ansible-playbook ./ansible-playbooks/1_ca/8_service-account.yaml
- ansible-playbook ./ansible-playbooks/1_ca/9_distribute-client-server-cert.yaml
# when: delayed
# start_in: 1 minutes
tags:
- banuka-gcp-k8s-hard-way
PS:这些ansible剧本是在ansible主机本身而不是在远程服务器中执行的。因此,我可以登录ansible
主服务器并检查是否创建了这些文件。
解决方法
在没有最后一个shell模块的情况下运行剧本会产生以下输出:
[WARNING]: provided hosts list is empty,only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [127.0.0.1] **************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ********************************************************************************************************************************************************************************************
ok: [127.0.0.1]
TASK [Create ca-csr.json] *****************************************************************************************************************************************************************************************
[WARNING]: File './ca-csr.json' created with default permissions '600'. The previous default was '666'. Specify 'mode' to avoid this warning.
changed: [127.0.0.1]
TASK [Create ca-config.json] **************************************************************************************************************************************************************************************
[WARNING]: File './ca-config.json' created with default permissions '600'. The previous default was '666'. Specify 'mode' to avoid this warning.
changed: [127.0.0.1]
PLAY RECAP ********************************************************************************************************************************************************************************************************
127.0.0.1 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
并检查是否存在:
$ ls ca* -al
-rw------- 1 root root 155 Aug 17 02:48 ca-config.json
-rw------- 1 root root 129 Aug 17 02:48 ca-csr.json
因此,尽管写剧本是一种非常肮脏的方式-还是可以的。 为什么它很脏? :
- 您没有使用任何库存
- 您应使用
local_action
而非connection: local
来执行本地任务 - 您滥用多节点配置管理ansible来执行
bash
脚本任务
因此,总而言之-Ansible剧本没有任何问题-也许还有文件权限(?),并且如果它没有运行-您应该在gitlab-ci方向上多看看。
您需要提供有关Gitlab-CI设置的更多详细信息,但是-也许stage
是不正确的?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。