Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Preliminary Alpine support for CI #437

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions setup/ansible-inventory
Original file line number Diff line number Diff line change
Expand Up @@ -196,3 +196,6 @@ node-win2012r2-x64-3.cloudapp.net

[github-bot]
infra-rackspace-debian8-x64-1

[test-ubuntu1604_docker_alpine34]
test-digitalocean-ubuntu1604_docker_alpine34-x64-1
2 changes: 2 additions & 0 deletions setup/ubuntu16.04_docker_alpine3.4/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
host_vars/test-*
roles/*
17 changes: 17 additions & 0 deletions setup/ubuntu16.04_docker_alpine3.4/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Alpine Linux 3.4 via Docker on Ubuntu 16.04 Setup

Add this to your ssh config:

```text
Host test-digitalocean-ubuntu1604_adocker_alpine34-x64-1
HostName 107.170.75.204
User root
#IdentityFile nodejs_build_test
```

..then run:

```bash
$ ansible-galaxy install -p . angstwad.docker_ubuntu
$ ansible-playbook -i ../ansible-inventory ansible-playbook.yaml
```
88 changes: 88 additions & 0 deletions setup/ubuntu16.04_docker_alpine3.4/ansible-playbook.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
---
- hosts: test-ubuntu1604_docker_alpine34
remote_user: root
gather_facts: False

tasks:
- name: Check for python
raw: which python
register: python_exists
failed_when: python_exists.rc > 1

- name: Bootstrap for the apt package
raw: apt install -y python-minimal aptitude
tags: bootstrap
when: python_exists.rc == 1

- hosts: test-ubuntu1604_docker_alpine34
remote_user: root
gather_facts: True

tasks:
- include_vars: ansible-vars.yaml
tags: vars

- name: General | APT update and upgrade
apt: update_cache=yes upgrade=full
tags: general

- name: General | Install required packages
apt: name={{ item }} update_cache=yes state=latest
with_items: packages
tags: general

- name: User | Add {{ server_user }} user
user: name="{{ server_user }}" shell=/bin/bash
tags: user

- name: User | Make work directories
file:
path: "/home/{{ server_user }}/{{ item }}"
state: directory
mode: 0755
owner: "{{ server_user }}"
group: "{{ server_user }}"
with_items:
- build
- tmp
tags: user

- name: Docker | Install Docker
hosts: test-ubuntu1604_docker_alpine34
remote_user: root
gather_facts: True
roles:
- angstwad.docker_ubuntu
tags: docker

- hosts: test-ubuntu1604_docker_alpine34
remote_user: root
gather_facts: True

tasks:
- include: tasks/setup-image.yaml image_type=test ci_host=ci.nodejs.org secret={{ test_secret }}
- include: tasks/setup-image.yaml image_type=release ci_host=ci-release.nodejs.org secret={{ release_secret }}

- name: SSH | Make release ssh config directory
file:
path: "/home/{{ server_user }}/release/.ssh/"
state: directory
mode: 0700
owner: "{{ server_user }}"
tags: docker_build

- name: SSH | Copy release ssh config
template:
src: ./resources/release_ssh_config
dest: "/home/{{ server_user }}/release/.ssh/config"
mode: 0600
owner: "{{ server_user }}"
tags: docker_init

- name: SSH | Copy release ssh staging key
template:
src: ./resources/node-www-staging-key
dest: "/home/{{ server_user }}/release/.ssh/node-www-staging"
mode: 0600
owner: "{{ server_user }}"
tags: docker_init
4 changes: 4 additions & 0 deletions setup/ubuntu16.04_docker_alpine3.4/ansible-vars.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
server_user: iojs
packages:
- curl
2 changes: 2 additions & 0 deletions setup/ubuntu16.04_docker_alpine3.4/ansible.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[defaults]
roles_path = ./roles/
1 change: 1 addition & 0 deletions setup/ubuntu16.04_docker_alpine3.4/requirements.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- src: angstwad.docker_ubuntu
1 change: 1 addition & 0 deletions setup/ubuntu16.04_docker_alpine3.4/resources/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node-www-staging-key
49 changes: 49 additions & 0 deletions setup/ubuntu16.04_docker_alpine3.4/resources/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
FROM alpine:3.4

ENV LC_ALL C
ENV USER {{ server_user }}
ENV JOBS {{ server_jobs | default(ansible_processor_vcpus) }}
ENV HOME /home/{{ server_user }}
ENV NODE_TEST_DIR /home/{{ server_user }}/tmp
ENV PATH /usr/lib/ccache/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV NODE_COMMON_PIPE /home/{{ server_user }}/test.pipe
ENV OSTYPE linux-gnu
ENV OSVARIANT docker
ENV DESTCPU x64
ENV ARCH x64

RUN apk add --no-cache \
libstdc++ \
&& apk add --no-cache --virtual .build-deps \
binutils-gold \
curl \
g++ \
gcc \
gnupg \
libgcc \
linux-headers \
make \
paxctl \
python \
tar \
ccache \
openjdk8 \
git \
procps \
openssh-client \
bash

RUN addgroup -g 1000 {{ server_user }}

RUN adduser -G {{ server_user }} -D -u 1000 {{ server_user }}

VOLUME [ "/home/{{ server_user }}/" ]

USER iojs

CMD cd /home/iojs \
&& curl https://ci.nodejs.org/jnlpJars/slave.jar -O \
&& java \
-jar slave.jar \
-jnlpUrl https://{{ ci_host }}/computer/{{ image_type }}-digitalocean-ubuntu1604_docker_alpine34-x64-1/slave-agent.jnlp \
-secret {{ secret }}
16 changes: 16 additions & 0 deletions setup/ubuntu16.04_docker_alpine3.4/resources/jenkins.service.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[Unit]
Description=Jenkins Slave in Docker
Wants=network.target
After=network.target

[Install]
WantedBy=multi-user.target

[Service]
Type=simple
User=root
ExecStart=/usr/bin/docker run --rm -v /home/{{ server_user }}/{{ image_type }}:/home/{{ server_user }} --name node-ci-alpine-{{ image_type }} node-ci:alpine-{{ image_type }}
ExecStop=/usr/bin/docker stop -t 5 node-ci-alpine-{{ image_type }}
Restart=always
RestartSec=30
StartLimitInterval=0
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Host iojs-www node-www
HostName direct.nodejs.org
User staging
IdentityFile ~/.ssh/node-www-staging
41 changes: 41 additions & 0 deletions setup/ubuntu16.04_docker_alpine3.4/tasks/setup-image.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
# requires: @image_type
# requires: @ci_host
# requires: @secret

- name: Docker | Make build directory
file:
path: /root/{{ image_type }}
state: directory
tags: docker_build

- name: Docker | Generate Dockerfile
template:
src: ./resources/Dockerfile.j2
dest: /root/{{ image_type }}/Dockerfile
tags: docker_build

- name: Docker | Build Alpine image
command: docker build -t node-ci:alpine-{{ image_type }} /root/{{ image_type }}/
tags: docker_build

- name: Docker | Make mountable home directory
file:
path: "/home/{{ server_user }}/{{ image_type }}"
state: directory
mode: 0755
owner: "{{ server_user }}"
tags: docker_build

- name: Init | Generate and copy init script
template:
src: ./resources/jenkins.service.j2
dest: /lib/systemd/system/jenkins-{{ image_type }}.service
tags: docker_init

- name: Init | Start Jenkins
service:
name: jenkins-{{ image_type }}
state: started
enabled: yes
tags: docker_init