共计 3504 个字符,预计需要花费 9 分钟才能阅读完成。
写在前面
没什么特殊之处,记录流程便于日后查阅。
实践
流程图如下:
关于如何在 Jenkins 中调用 Ansible,可参考:Jenkins 流水线中调用 Ansible
ansible playbook 编写
# 查看剧本目录结构
# tree victoria-metrics-single/
victoria-metrics-single/
├── hosts
├── Jenkinsfile
├── main.yml
└── roles
└── victoria-metrics-single
├── files
│ └── victoria-metrics.service
└── tasks
└── main.yml
4 directories, 5 files
主要配置文件分析:
-
main.yml
:剧本入口
# cat main.yml
---
# x86_64
- name: 部署 victoria-metrics 单节点版本
hosts: victoria-metrics-single
gather_facts: yes
roles:
- role: victoria-metrics-single
when: (ansible_facts['distribution'] == "CentOS" and ansible_facts['distribution_major_version'] == "7" or
ansible_facts['distribution'] == "Ubuntu" or ansible_facts['distribution'] == "Debian")
become: yes
vars:
install_dir: "/usr/local/bin"
config_dir: "/etc/victoriametrics"
data_dir: "/var/lib/victoriametrics"
-
Jenkinsfile
:流水线配置
# cat Jenkinsfile
pipeline {
agent any
options {
ansiColor('xterm') // 控制台输出添加对标准 ANSI 转义序列(包括颜色)的支持。
}
environment {
ANSIBLE_HOST_KEY_CHECKING = 'False' // 全局禁用主机密钥检查
}
stages {
stage('Run Ansible') {
steps {
sshagent(credentials: ['ansible-ssh-key']) {
ansiblePlaybook(
playbook: 'main.yml',
inventory: 'hosts',
colorized: true,
hostKeyChecking: false,
// 可选:添加额外变量
extraVars: [
'env': 'production'
]
)
}
}
}
}
post {
always {
cleanWs() // 清理工作空间
}
success {
echo 'Ansible playbook execution successful!'
}
failure {
echo 'Ansible playbook execution failed!'
}
}
}
-
roles/victoria-metrics-single/tasks/main.yml
:ansible task每次会从 GitHub 下载最新版本执行安装
# cat roles/victoria-metrics-single/tasks/main.yml
---
- name: 从 GitHub 获取 latest 版本信息
delegate_to: localhost
uri:
url: https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest
return_content: yes
register: github_response
run_once: true
- name: 注册版本信息
set_fact:
vm_version: "{{ github_response.json.tag_name }}"
- name: 下载 VictoriaMetrics 单节点版本
delegate_to: localhost
get_url:
url: "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/{{ vm_version }}/victoria-metrics-linux-amd64-v{{ vm_version[1:] }}.tar.gz"
dest: "{{ role_path }}/files/victoria-metrics-linux-amd64-v{{ vm_version[1:] }}.tar.gz"
run_once: true
- name: 解压缩 VictoriaMetrics 单节点版本
delegate_to: localhost
unarchive:
src: "{{ role_path }}/files/victoria-metrics-linux-amd64-v{{ vm_version[1:] }}.tar.gz"
dest: "{{ role_path }}/files/"
run_once: true
- name: 创建 victoriametrics 组
group:
name: victoriametrics
state: present
system: true
- name: 创建 victoriametrics 用户
user:
name: victoriametrics
group: victoriametrics
shell: /usr/sbin/nologin
system: true
create_home: false
- name: 创建工作目录
file:
path: "{{ item }}"
state: directory
owner: victoriametrics
group: victoriametrics
mode: '0755'
with_items:
- "{{ config_dir }}"
- "{{ data_dir }}"
- name: 下发二进制包
copy:
src: "{{ role_path }}/files//victoria-metrics-prod"
dest: "{{ install_dir }}/victoria-metrics-prod"
mode: '0755'
owner: victoriametrics
group: victoriametrics
- name: 下发 systemd 单元文件
copy:
src: victoria-metrics.service
dest: /etc/systemd/system
mode: '0755'
- name: 配置开机自启
systemd:
name: victoria-metrics
state: started
enabled: yes
daemon_reload: yes
- name: 获取 VictoriaMetrics service 状态
command: systemctl status victoria-metrics
register: service_status
changed_when: false # 这个命令不会改变系统状态
failed_when: false # 即使服务未运行也不会导致任务失败
- name: 打印 VictoriaMetrics service 状态
debug:
msg: "{{ service_status.stdout_lines }}"
git 相关配置
GitLab 新建项目:victoria-metrics-single
创建访问凭证,此凭证需要存入到 jenkins 中,用于拉取项目。
设置 –> 仓库 –> 部署令牌
git 客户端命令:
cd victoria-metrics-single
# 忽略部分文件
cat > .gitignore << EOF
*.log
*.tmp
*.swp
.DS_Store
EOF
# 初始化、添加暂存区、配置远程仓库、提交、推送到分支
git init --initial-branch=master
git add .
git remote add origin ssh://git@***.opshub.cn/pengyinwei/victoria-metrics-single.git
git commit -m "Initial commit: Add victoria-metrics-single ansible role"
git push -u origin master
jenkins 配置
录入凭证:
系统管理 –> 凭据管理 –> 系统 –> 全局凭据 –> Add Credentials
创建新流水线任务:
触发构建
效果如下:
本文属于专题:Jenkins
- Docker 部署的 Jenkins 调用 Docker 客户端
- Jenkins 流水线构建镜像发布
- Jenkins 流水线中调用 Ansible
- 使用 Jenkins 部署 VictoriaMetrics
引用链接
正文完