希望长大对我而言,是可以做更多想做的事,而不是被迫做更多不想做的事...... 首页 Jenkins+GitLab+Ansible 丁D 学无止境 2019-04-11 14:34 2684已阅读 devops CICD Jenkins GitLab Ansible 摘要CICD平台由Jenkins、GitLab、Ansible构成,本篇将讲述搭建步骤。 ###目标 jenkins点击立即构建完成项目的编译部署 **方式1:** jenkins安装maven插件构建成war 直接构建后的操作发送到远程服务器,并使用脚本重启服务器。(单机版) **方式2:** jenkins安装maven插件构建成war 使用ansible将war 复制到各个节点上(多个) 使用脚本重启tomcat **方式3:** jenkins自由项目 构建时调用ansible的脚本(拉取代码,maven,构建,tomcat重启) 方式3具体思路描述: jenkins构建时调用ansible的脚本 1.构建时去git拉取代码到代码库 失败会重新拉一次(最多两次) 2.将代码重代码库复制到版本库 3.ansible脚本调用build.sh(mvn clean package)去构建项目 4.将current当前版本的文件夹指向版本库(第3步构建的位置) 5.将配置文件 拷贝过来 6.使用handle去触发supervisor重新加载 环境: 使用ansible 安装java git maven supervisor等 版本库最多放5个版本,其他的会被删除 **回滚** 1.去版本库找到上一个版本 。 2.将current指向上一个版本。 ### 通过角色安装git ![alt](/upload/866ae795288bad91c95ee1e6b6b7a5f.png ) ![alt](/upload/bb3cf0b961afa97752cd53c291055cc.png ) ```js //main.yml --- - include: git.yml //git.yml - name: Install lasetest git yum: name: '{{item}}' state: present with_items: - git ``` ```js //调用安装git 会自动去扫描 /etc/ansible/roles的角色 --- - hosts: 39.108.231.144 roles: - { role: common} ``` ###安装maven ![alt](/upload/2476e3d2295b82156f8926eecff194e.png ) ```js //main.yml --- - stat: path={{maven_path}}apache-maven-{{maven_version}}/bin/ register: mvn_bin - include: install.yml when: not mvn_bin.stat.exists //install.yml [root@iZwz9278r1bks3b80puk6fZ tasks]# cat install.yml #- name: unarchive for maven # unarchive: # src: /root/app/apache-maven-{{maven_version}}-bin.tar.gz # dest: '{{maven_path}}' # copy: yes - name: config maven home lineinfile: path: /etc/profile.d/maven.sh create: yes state: present line: 'export MAVEN_HOME={{maven_path}}apache-maven-{{maven_version}}' - name: config maven path lineinfile: path: /etc/profile.d/maven.sh create: yes state: present line: 'export PATH=${PATH}:${MAVEN_HOME}/bin' - name: source profile shell: >- source /etc/profile ``` ```js [root@iZwz9278r1bks3b80puk6fZ maven]# cd defaults/ [root@iZwz9278r1bks3b80puk6fZ defaults]# ll total 4 -rw-r--r-- 1 root root 50 Apr 10 17:26 main.yml [root@iZwz9278r1bks3b80puk6fZ defaults]# cat main.yml --- maven_version: 3.6.0 maven_path: /root/maven/ ``` ```js //调用安装maven会自动去扫描 /etc/ansible/roles的角色 --- - hosts: 39.108.231.144 roles: - { role: maven } ``` **问题** source /etc/profile 不生效 ansible这类ssh远程执行是non-login shell,不会加载etc/profile,~/.bash_profile,而是加载etc/bashrc和~/.bashrc ###从git拉取代码 ```js --- - name: module git test hosts: 39.108.231.144 vars: repo_url: git@xxxxxxxxxx.git dest_path: /root/playbooks/repo tasks: - name: checkout repository on the host git: repo={{ repo_url }} dest={{ dest_path }} accept_hostkey=yes version=dev force=yes ``` ### blog 例子 ```js //blog_update.yml --- - hosts: blog vars: app_name: blog repo_url: git@github.com:348786639/blog.git dest_path: /root/blog/repo release_path: /root/blog/release version_path: "{{ ansible_date_time.date|replace('-', '') }}{{ ansible_date_time.time|replace(':', '') }}" blog_configs: - {src: 'config.properties' , dest: 'src/main/resources/config.properties' } - {src: 'jdbc.properties', dest: 'src/main/resources/jdbc.properties' } environment: JAVA_HOME: /usr/local/jdk1.8.0_144/ roles: - { role: blog } ``` ```js // cat /etc/ansible/roles/blog/tasks/main.yml --- - name: 'debug' debug: msg: '222222' - name: checkout repository on the host git: repo={{ repo_url }} dest={{ dest_path }} accept_hostkey=yes version=master force=yes - name: create release path file: path: '{{release_path}}/{{version_path}}' state: directory mode: 755 - name: copy config file from template template: src: ../template/{{ item.src }} dest: '{{ dest_path }}/{{item.dest}}' force: yes with_items: '{{ blog_configs|default([]) }}' - name: copy code to release shell: rsync -r --exclude=.git {{dest_path}}/ {{release_path}}/{{version_path}} chdir={{dest_path}} - name: build project shell: /bin/bash build.sh chdir={{release_path}}/{{version_path}} - name: link to current shell: ln -sfn ./{{version_path}} ./current chdir={{release_path}} ``` **template**目录中有配置文件 jdbc.properties config.properties 很赞哦! (15) 上一篇:ansible-语法 下一篇:Compose和Swarm 目录 点击排行 Elasticsearch6.3.2之x-pack redis哨兵 2019-07-09 22:05 Redis+Twemproxy+HAProxy+Keepalived 2019-07-12 17:20 GC优化策略和相关实践案例 2019-10-10 10:54 JVM垃圾回收器 2019-10-10 10:23 标签云 Java Spring MVC Mybatis Ansible Elasticsearch Redis Hive Docker Kubernetes RocketMQ Jenkins Nginx 友情链接 郑晓博客 佛布朗斯基 凉风有信 MarkHoo's Blog 冰洛博客 南实博客 Rui | 丁D Java研发工程师 生活可以用「没办法」三个字概括。但别人的没办法是「腿长,没办法」、「长得好看,没办法」、「有才华,没办法」。而你的没办法,是真的没办法。 请作者喝咖啡