【实践】Ansible 部署 Jenkins

引言

持续集成和交付是现代软件开发的关键实践之一。它们旨在通过频繁地集成和交付代码来加速软件开发周期,并确保软件质量。Jenkins作为一个功能强大的自动化服务器,可以帮助团队实现这一目标。而使用Ansible来部署Jenkins,可以进一步简化和标准化部署过程,提高效率和可维护性。

Jenkins的使用场景

Jenkins在软件开发中有多个常见的使用场景。下面是其中一些典型的场景:

  1. 构建和编译:Jenkins可以自动化执行构建和编译任务,如编译源代码、打包应用程序等。它支持各种构建工具和构建系统,如Maven、Gradle和Ant。

  2. 自动化测试:Jenkins可以集成各种测试框架和工具,如JUnit、Selenium和Cucumber,以自动化执行单元测试、集成测试和端到端测试。它还提供了丰富的报告和可视化功能,帮助团队分析测试结果。

  3. 静态代码分析:Jenkins可以与静态代码分析工具集成,如SonarQube和FindBugs,以检测代码中的潜在问题和质量问题。它可以定期运行静态代码分析,并生成相应的报告和度量指标。

  4. 部署和交付:Jenkins可以自动化部署应用程序到不同的环境,如开发、测试和生产环境。它支持各种部署方式,如传统的服务器部署、容器化部署和云平台部署。

5. 持续集成和交付流水线:Jenkins提供了强大的流水线功能,可以定义和管理复杂的持续集成和交付流程。它支持多阶段的构建和部署任务,并允许通过可视化界面或代码方式定义流水线。

这些只是Jenkins的一小部分使用场景。它的灵活性和可扩展性使得它适用于各种软件开发环境和需求。

Ansible部署Jenkins的实践

1.1 准备一台阿里云ECS

可以通过我前面发布的文章,一键购买

1.2 准备Ansible Inventory 文件

创建一个文件 deploy-jenkins-host.ini

[deploy]
aliyun_ecs ansible_ssh_host=118.31.76.44 ansible_ssh_port=22 ansible_user=ecs-user ansible_ssh_pass=Ecs-user123 ansible_sudo_pass=Ecs-user123

1.3 准备 开机启动服务脚本

创建一个文件 jenkins-supervisord.ini.j2

[program:jenkins]
environment=JAVA_HOME="{{ jenkins_java_home }}"           ;
directory=/home/{{ jenkins_install_user }}               ;
command={{ jenkins_java_home }}/bin/java -jar -Djenkins.install.runSetupWizard=false jenkins.war ;
stopsignal=KILL                                           ;
stderr_logfile=/var/log/supervisor/jenkins.err            ;
stdout_logfile=/var/log/supervisor/jenkins.out            ;
stdout_logfile_maxbytes=10MB                              ;
stdout_logfile_backups=10                                 ;
user={{ jenkins_install_user }}                           ;
umask=022                                                 ;
autostart=true                                            ;
autorestart=true                                          ;
startsecs=10                                              ;
startretries=3                                            ;
stopasgroup=true                                          ;
killasgroup=true                                          ;
redirect_stderr=false                                     ;

1.4 准备 Ansible Playbook 文件

创建一个文件 deploy-jenkins.yaml

- name: 安装 Jenkins
  hosts: deploy
  become: true
  vars:
    jenkins_version: 2.401.3
    jenkins_home_name: "/home/"
    jenkins_war_name: "jenkins.war"
    jenkins_download_url: "http://i-ansible.oss-cn-hangzhou-internal.aliyuncs.com/jenkins/{{ jenkins_version }}/{{ jenkins_war_name }}"
    jenkins_install_user: ecs-user
    jenkins_java_home: "/home/{{ jenkins_install_user }}/jdk-11.0.2"
  tasks:
    - name: 下载 Linux 通用包
      ansible.builtin.get_url:
        url: "{{ jenkins_download_url }}"
        validate_certs: false
        dest: "/home/{{ jenkins_install_user }}/{{ jenkins_war_name }}"
        mode: "0644"
        force: true
        owner: "{{ jenkins_install_user }}"
        group: "{{ jenkins_install_user }}"
      tags: download

    - name: 安装字体依赖包 1
      ansible.builtin.apt:
        name: "{{ item }}"
        state: present
      with_items:
        - fontconfig
      when: ansible_os_family == 'Debian'

    - name: 安装字体依赖包 2
      ansible.builtin.yum:
        name: "{{ item }}"
        state: present
      with_items:
        - fontconfig
      when: ansible_os_family == 'RedHat'

    - name: 复制启动文件
      ansible.builtin.template:
        src: "{{ item }}.j2"
        dest: "/etc/supervisord.d/conf.d/{{ item }}"
        mode: "0755"
        owner: root
        group: root
      with_items:
        - jenkins-supervisord.ini

    - name: 更新启动文件
      ansible.builtin.command:
        chdir: /tmp
        cmd: /usr/bin/supervisorctl -c /etc/supervisord.d/supervisor.conf update
      changed_when: false

    - name: 重启0
      ansible.builtin.command:
        chdir: /tmp
        cmd: "/usr/bin/supervisorctl -u admin -p 123456 stop jenkins"
      changed_when: false

    - name: 重启1
      ansible.builtin.command:
        chdir: /tmp
        cmd: "/usr/bin/supervisorctl -u admin -p 123456 start jenkins"
      changed_when: false

    - name: 检查端口是否运行
      ansible.builtin.wait_for:
        port: 8080
        state: started
        delay: 5
        timeout: 120
    # 密码在这里 cat /home/ecs-user/.jenkins/secrets/initialAdminPassword

1.5 访问测试

在这里插入图片描述

结论

Jenkins是一个功能强大且广泛使用的持续集成和交付工具。通过使用Ansible来部署Jenkins,你可以简化和标准化部署过程,并提高效率和可维护性。在不同的使用场景下,Jenkins可以帮助团队自动化构建、测试和部署软件,从而加速软件开发周期并提高质量。

如果你对Jenkins和Ansible有更多的兴趣和好奇,我鼓励你进一步探索它们的功能和扩展性。持续学习和实践将使你成为一个更出色的软件开发者。

祝你在使用Jenkins和Ansible的过程中取得成功!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱写代码的小任

感谢老板打赏,我将会再接再厉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值