Files
netology-devops/src/homework/09-ci/9.4/infrastructure/site.yml

215 lines
6.0 KiB
YAML

---
- name: Preapre all hosts
hosts: all
tasks:
- name: Create group
become: true
group:
name: "{{ user_group }}"
state: present
- name: Create user
become: true
user:
name: "{{ user_name }}"
generate_ssh_key: true
register: ssh_key_info
- name: Install JDK
become: true
package:
name: "{{ java_packages }}"
state: present
- name: Get Jenkins master installed
hosts: jenkins_masters
tasks:
- name: Get repo Jenkins
become: true
get_url:
url: https://pkg.jenkins.io/redhat-stable/jenkins.repo
dest: /etc/yum.repos.d/jenkins.repo
validate_certs: false
- name: Add Jenkins key
become: true
rpm_key:
key: https://pkg.jenkins.io/redhat-stable/jenkins.io.key
state: present
validate_certs: false
- name: Install epel-release
become: true
yum:
name: epel-release
state: present
- name: Install Jenkins and requirements
become: true
yum:
name:
- jenkins
- git
state: present
register: jenkins_installed
- name: Ensure jenkins agents are present in known_hosts file
become: true
become_user: "{{ jenkins_user_name }}"
known_hosts:
name: "{{ hostvars[item].ansible_host }}"
state: present
key: "{{ lookup('pipe', 'ssh-keyscan {{ hostvars[item].ansible_host }}') }}"
hash_host: true
with_items: "{{ groups.jenkins_agents }}"
- name: Start Jenkins
become: true
systemd:
name: jenkins
state: restarted
enabled: true
when: jenkins_installed is changed
- name: Ensure github.com is a known host
become: true
become_user: "{{ jenkins_user_name }}"
lineinfile:
dest: ~/.ssh/known_hosts
create: yes
state: present
line: "{{ lookup('pipe', 'ssh-keyscan -t rsa github.com') }}"
regexp: "^github\\.com"
tags:
- jenkins-master
- name: Prepare jenkins agent
hosts: jenkins_agents
become: true
become_user: "{{ jenkins_user_name }}"
tasks:
- name: Add master publickey into authorized_key
authorized_key:
user: "{{ jenkins_user_name }}"
state: present
key: "{{ hostvars['jenkins-master-01']['ssh_key_info']['ssh_public_key'] }}"
- name: Create agent_dir
become_user: root
file:
path: "{{ jenkins_agent_dir }}"
state: directory
owner: "{{ jenkins_user_name }}"
group: "{{ jenkins_user_group }}"
- name: Add docker repo
become_user: root
get_url:
url: https://download.docker.com/linux/centos/docker-ce.repo
dest: /etc/yum.repos.d/docker-ce.repo
validate_certs: false
- name: Install some required
become_user: root
yum:
name:
- git
- docker-ce
- docker-ce-cli
- containerd.io
- gcc
- openssl-devel
- bzip2-devel
- libffi-devel
- zlib-devel
- xz-devel
state: present
- name: Download python 3.8 distrib
ansible.builtin.get_url:
url: "https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz"
dest: "{{ jenkins_agent_dir }}/Python-3.8.12.tgz"
- name: Unpack python 3.8 distrib
ansible.builtin.unarchive:
src: "{{ jenkins_agent_dir }}/Python-3.8.12.tgz"
dest: "{{ jenkins_agent_dir }}"
remote_src: true
- name: Configure python 3.8
ansible.builtin.shell:
cmd: ./configure --enable-optimizations
chdir: "{{ jenkins_agent_dir }}/Python-3.8.12"
- name: Install python 3.8
become_user: root
ansible.builtin.shell:
cmd: make altinstall
chdir: "{{ jenkins_agent_dir }}/Python-3.8.12"
- name: Create symbolic link python3
become_user: root
ansible.builtin.file:
src: /usr/local/bin/python3.8
dest: /usr/bin/python3
state: link
- name: Create symbolic link pip3
become_user: root
ansible.builtin.file:
src: /usr/local/bin/pip3.8
dest: /usr/bin/pip3
state: link
- name: Add local to path
become_user: root
ansible.builtin.shell: echo "PATH=$PATH:/usr/local/bin" > /etc/environment
- name: Update pip
become_user: root
pip:
executable: /usr/bin/pip3
name: pip
extra_args: --upgrade
- name: Install Ansible
become_user: root
pip:
executable: /usr/bin/pip3
name:
- selinux
- ansible<3.0
state: present
- name: Reinstall Selinux
become_user: root
pip:
executable: /usr/bin/pip3
name:
- selinux
state: forcereinstall
- name: Create docker group
become_user: root
group:
name: docker
state: present
- name: Add jenkins user to dockergroup
become_user: root
user:
name: "{{ jenkins_user_name }}"
groups: docker
- name: Restart docker
become_user: root
systemd:
name: docker
state: restarted
enabled: true
- name: Install agent.jar
get_url:
url: "http://{{ hostvars['jenkins-master-01']['ansible_host'] }}:8080/jnlpJars/agent.jar"
dest: "{{ jenkins_agent_dir }}"
register: install_agent
until: install_agent is succeeded
retries: 10
timeout: 10
- name: Install pip molecule
become_user: root
ansible.builtin.pip:
executable: /usr/bin/pip3
name:
- molecule==3.5.2
- molecule-docker
- yamllint
- ansible-lint
- name: Update ansible community.docker collection
ansible.builtin.shell:
cmd: ansible-galaxy collection install community.docker
- name: Ensure github.com is a known host
lineinfile:
dest: ~/.ssh/known_hosts
create: yes
state: present
line: "{{ lookup('pipe', 'ssh-keyscan -t rsa github.com') }}"
regexp: "^github\\.com"
tags:
- jenkins-agent