引言
持续集成和交付是现代软件开发的关键实践之一。它们旨在通过频繁地集成和交付代码来加速软件开发周期,并确保软件质量。Jenkins作为一个功能强大的自动化服务器,可以帮助团队实现这一目标。而使用Ansible来部署Jenkins,可以进一步简化和标准化部署过程,提高效率和可维护性。
Jenkins的使用场景
Jenkins在软件开发中有多个常见的使用场景。下面是其中一些典型的场景:
- 构建和编译:Jenkins可以自动化执行构建和编译任务,如编译源代码、打包应用程序等。它支持各种构建工具和构建系统,如Maven、Gradle和Ant。
- 自动化测试:Jenkins可以集成各种测试框架和工具,如JUnit、Selenium和Cucumber,以自动化执行单元测试、集成测试和端到端测试。它还提供了丰富的报告和可视化功能,帮助团队分析测试结果。
- 静态代码分析:Jenkins可以与静态代码分析工具集成,如SonarQube和FindBugs,以检测代码中的潜在问题和质量问题。它可以定期运行静态代码分析,并生成相应的报告和度量指标。
- 部署和交付: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的过程中取得成功!