内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。
本文档介
风哥提示:
绍Ansible与CI/CD工具集成的配置方法。
Part01-GitLab CI集成
1.1 GitLab CI配置
[root@gitlab ~]# cat > /var/opt/gitlab/git-data/repositories/fgedu/app.git/.gitlab-ci.yml << 'EOF' stages: - test - build - deploy variables: ANSIBLE_HOST_KEY_CHECKING: "false" ANSIBLE_FORCE_COLOR: "true" before_script: - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh test: stage: test script: - ansible-playbook -i inventory/test playbooks/test.yml --check only: - merge_requests build: stage: build script: - ansible-playbook -i inventory/staging playbooks/build.yml only: - develop deploy_staging: stage: deploy script: - ansible-playbook -i inventory/staging playbooks/deploy.yml -e "env=staging" environment: name: staging url: https://staging.fgedu.net.cn only: - develop deploy_production: stage: deploy script: - ansible-playbook -i inventory/production playbooks/deploy.yml -e "env=production" environment: name: production url: https://www.fgedu.net.cn when: manual only: - main EOF # 部署Playbook [root@ansible ~]# cat > /fglinux/ansible/playbooks/ci_deploy.yml << 'EOF' --- - name: CI/CD部署 hosts: "{{ target_hosts }}" become: yes vars: app_name: fgedu_app app_version: "{{ lookup('env', 'CI_COMMIT_SHORT_SHA') | default('latest') }}" deploy_dir: /opt/fgedu app_port: 8080 tasks: - name: 显示部署信息 debug: msg: | 部署应用: {{ app_name }} 版本: {{ app_version }} 目标: {{ inventory_hostname }} - name: 创建部署目录 file: path: "{{ deploy_dir }}/releases/{{ app_version }}" state: directory mode: '0755' - name: 拉取应用代码 git: repo: "{{ git_repo }}" dest: "{{ deploy_dir }}/releases/{{ app_version }}" version: "{{ app_version }}" register: git_result - name: 安装依赖 command: npm install --production args: chdir: "{{ deploy_dir }}/releases/{{ app_version }}" when: git_result.changed - name: 更新符号链接 file: src: "{{ deploy_dir }}/releases/{{ app_version }}" dest: "{{ deploy_dir }}/current" state: link - name: 重启应用服务 service: name: "{{ app_name }}" state: restarted - name: 等待服务启动 wait_for: port: "{{ app_port }}" delay: 5 timeout: 60 - name: 健康检查 uri: url: "http://localhost:{{ app_port }}/health" return_content: yes register: health_check until: health_check.status == 200 retries: 3 delay: 10 - name: 清理旧版本 shell: | ls -1t {{ deploy_dir }}/releases | tail -n +6 | xargs -I {} rm -rf {{ deploy_dir }}/releases/{} when: git_result.changed - name: 发送部署通知 slack: token: "{{ slack_token }}" msg: | 部署完成 应用: {{ app_name }} 版本: {{ app_version }} 主机: {{ inventory_hostname }} 状态: 成功 delegate_to: localhost when: slack_token is defined EOF # 执行CI部署 [root@ansible ~]# ansible-playbook /fglinux/ansibl学习交流加群风哥微信: itpux-come/playbooks/ci_deploy.yml -e "target_hosts=webservers" PLAY [CI/CD部署] ************************************************************ TASK [Gathering Facts] ****************************************************** ok: [web1.fgedu.net.cn] TASK [显示部署信息] ********************************************************** ok: [web1.fgedu.net.cn] => {
“msg”: “部署应用: fgedu_app\n版本: abc1234\n目标: web1.fgedu.net.cn”
}
TASK [创建部署目录] **********************************************************
changed: [web1.fgedu.net.cn]
TASK [拉取应用代码] **********************************************************
changed: [web1.fgedu.net.cn]
TASK [安装依赖] *************************************************************
changed: [web1.fgedu.net.cn]
TASK [更新符号链接] **********************************************************
changed: [web1.fgedu.net.cn]
TASK [重启应用服务] **********************************************************
changed: [web1.fgedu.net.cn]
TASK [等待服务启动] **********************************************************
ok: [web1.fgedu.net.cn]
TASK [健康检查] *************************************************************
ok: [web1.fgedu.net.cn]
TASK [清理旧版本] ***********************************************************
changed: [web1.fgedu.net.cn]
TASK [发送部署通知] **********************************************************
skipping: [web1.fgedu.net.cn]
PLAY RECAP ******************************************************************
web1.fgedu.net.cn : ok=9 changed=5 unreachable=0 failed=0 skipped=1
- 使用版本控制管理Playbook
- 配置自动化测试流程
- 实现蓝绿部署策略
- 配置回滚机制
- 记录部署日志
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
