Last active 1746278176

Revision 24c5861ac403a10f685efa1d1be1c1c596d5a78f

environment Raw
1#!/bin/sh
2log() { printf '\n\033[m\033[38;5;11m~~~ %s %s ~~~\033[m\n' $1 $2; }
3
4log "deploy environment"
5
6# obvious stuff
7export PATH=${PATH}:/usr/local/bin
8export SHELL=/bin/sh
9# a righteous secure umask
10umask 027
11
12log "deploy ssh_agent"
13
14# ensure we have a usable running ssh agent to inject keys into
15# reuse an existing agent if there is one
16SSH_AUTH_SOCK=$(find /tmp/ssh-* -type s -name agent.\* -print | head -1 )
17
18# else, clean up and acquire a new one
19if test ! -S "${SSH_AUTH_SOCK:-}" ; then
20 echo no existing ssh-agent found, spawning a new one
21 /bin/pkill -U $USER ssh-agent
22 eval $(/usr/bin/ssh-agent)
23fi
24
25echo ssh-agent: $SSH_AUTH_SOCK
26export SSH_AUTH_SOCK
27
28log "vault authn"
29
30# obtain a vault token for use during this session
31# ensure we have address and auth key for vault
32if test -z "${VAULT_ADDR:-}" ; then
33 echo vault: missing VAULT_ADDR url
34 exit 1
35fi
36
37if test -z "${VAULT_SECRET:-}" ; then
38 echo vault: missing VAULT_SECRET token
39 exit 1
40fi
41
42# from here on error handling can be enabled safely
43set -o pipefail
44set -e
45
46# acquire a valid token
47export VAULT_TOKEN=$(/usr/local/bin/vault login -token-only -method=github token=${VAULT_SECRET})
48/usr/local/bin/vault read secret/test > /dev/null 2>&1
49log "vault tokens_valid"
50
51# acquire ssh keys
52# first, the deploy key as github only checks the first presented key
53/usr/local/bin/vault read -field=ssh_private_key secret/enso-bot | ssh-add -
54# then, the ansible key, as ssh daemon on servers will check both
55/usr/local/bin/vault read -field=ssh_private_key secret/ansible | ssh-add -
56log "ssh_agent keys_loaded"
57ssh-add -L
58
59
60log "cleaning environment"
61
62export VAULT_SECRET=""
63test "$PHASE" == "webhook" && export BUILDKITE_REPO=''
64test "$PHASE" != "webhook" && export CABAL_HMAC_SECRET=''
65
66log "setup tmpdir"
67# set a per-job custom TMPDIR
68export TMPDIR=$(mktemp -d -t buildkite)
69echo tmpdir: $TMPDIR
70echo home: $HOME
71echo pwd: $(pwd -P)
72
73############ end common section ############
74
75log "buildkite env ready"
main.yml Raw
1---
2- name: install buildkite agent
3 pkgng:
4 state: latest
5 name:
6 - devel/buildkite-agent
7 - devel/git
8 - devel/gmake
9 - security/vault
10 - www/gurl
11 tags: buildkite, pkg
12
13- name: deploy buildkite agent template
14 copy:
15 content: |
16 name='{{ instance.fqdn | default(inventory_hostname_short) }}-%spawn'
17 spawn={{ buildkite_concurrency | default(1) }}
18 tags='os={{ ansible_distribution }},queue={{ buildkite_queue }}'
19 build-path='/var/db/ci/buildkite'
20 hooks-path='/usr/local/etc/buildkite/hooks'
21 plugins-path='/usr/local/etc/buildkite/plugins'
22 debug=false
23 dest: /usr/local/etc/buildkite/agent.cfg
24 owner: root
25 group: '{{ buildkite_group | default("wheel") }}'
26 mode: 0440
27 notify: restart buildkite
28 tags: buildkite
29
30- name: enable buildkite daemon
31 copy:
32 content: |
33 # https://buildkite.com/docs/agent
34 # mandatory parameters
35 buildkite_enable=YES
36 buildkite_token={{ buildkite_token }}
37 buildkite_account={{ ci_user | default("root") }}
38 # optional parameters
39 buildkite_config=/usr/local/etc/buildkite/agent.cfg
40 buildkite_vars='CABAL_HMAC_SECRET={{ cabal_hmac_signing_key }} \
41 VAULT_ADDR=https://vault.{{ admin_domain }}/ \
42 VAULT_SECRET={{ ci_vault_auth_token }} \
43 '
44 dest: /etc/rc.conf.d/buildkite
45 owner: root
46 group: wheel
47 mode: 0440
48 notify: restart buildkite
49 tags: buildkite
50
51- name: deploy buildkite environment script
52 template:
53 src: buildkite_environment.j2
54 dest: /usr/local/etc/buildkite/hooks/environment
55 mode: 0750
56 owner: root
57 group: '{{ buildkite_group | default("wheel") }}'
58 notify: restart buildkite
59 tags: buildkite
60