Os runners permitem que você execute pipelines a partir de seus repositórios. O bitbucket permite que hospede esses runners em sua própria infraestrutura, os chamados self-hosted runners
.
Nesse artigo vamos ver o passo a passo de como criar um runner auto-hospedado em nível de workspace e executá-lo em Kubernetes.
O primeiro passo é a criação de um novo runner. Vamos criá-lo em nível de workspace:
Navegue até seu perfil e clique no workspace que deseja.
Clique em configurações e selecione workspace runners.
Adicionar runner.
Defina o nome para o runner e uma label
. As labels self.hosted
e linux
são padrões, precisamos adicionar uma nova label para podermos identificar no pipeline em qual runner o build deve ser executado, caso existam outros runners criados.
Clique em next
. Será gerada uma saída com o seguinte comando docker:
docker container run -it -v /tmp:/tmp -v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/containers:/var/lib/docker/containers:ro \
-e ACCOUNT_UUID={ACCOUNT_UUID} \
-e RUNNER_UUID={RUNNER_UUID} \
-e RUNTIME_PREREQUISITES_ENABLED=true \
-e OAUTH_CLIENT_ID=OAUTH_CLIENT_ID \
-e OAUTH_CLIENT_SECRET=OAUTH_CLIENT_SECRET \
-e WORKING_DIRECTORY=/tmp \
--name runner-87c1a9ae-c216-5512-a92d-12fb95f77f0b \ docker-public.packages.atlassian.com/sox/atlassian/bitbucket-pipelines-runner:1
Copie esse comando, pois vamos utilizar os valores das variáveis apresentadas para a configuração do nosso runner auto-hospedado e clique em finish
.
Observe que o runner foi criado no workspace, mas seu status está como UNREGISTRED
. Após configurarmos o runner e executá-lo no ambiente Kubernetes seu status irá mudar para ONLINE
.
O próximo passo é a construção dos arquivos kubernetes para hospedarmos o runner.
Primeiro vamos tratar as variáveis dadas pelo comando:
-e ACCOUNT_UUID={ACCOUNT_UUID} \
-e RUNNER_UUID={RUNNER_UUID} \
-e RUNTIME_PREREQUISITES_ENABLED=true \
-e OAUTH_CLIENT_ID=OAUTH_CLIENT_ID \
-e OAUTH_CLIENT_SECRET=OAUTH_CLIENT_SECRET \
-e WORKING_DIRECTORY=/tmp \
echo -n OAUTH_CLIENT_ID | base64
echo -n OAUTH_CLIENT_SECRET | base64
Feito isso passamos para a etapa de construção dos arquivos Kubernetes:
Adicione os valores das variáveis:
apiVersion: v1
kind: Secret
metadata:
name: runner-01-oauth-credentials
labels:
accountUuid: {ACCOUNT_UUID}
runnerUuid: {RUNNER_UUID}
data:
oauthClientId: {OAUTH_CLIENT_ID}
oauthClientSecret: {OAUTH_CLIENT_SECRET}
Importante: No arquivo job.yaml as variáveis de accountUuid e runnerUuid, na seção de ‘container variables’, devem ser adicionadas entre “ ”
e { }
, dessa forma “{ACCOUNT_UUID}”
apiVersion: batch/v1
kind: Job
metadata:
name: runner-01
spec:
template:
metadata:
labels:
accountUuid: {ACCOUNT_UUID}
runnerUuid: {RUNNER_UUID}
spec:
containers:
- name: bitbucket-runner-01
image: docker-public.packages.atlassian.com/sox/atlassian/bitbucket-pipelines-runner
env:
- name: ACCOUNT_UUID
value: “{${ACCOUNT_UUID}}”
- name: RUNNER_UUID
value: “{${RUNNER_UUID}}”
- name: RUNTIME_PREREQUISITES_ENABLED
value: true
- name: WORKING_DIRECTORY
value: "/tmp"
- name: OAUTH_CLIENT_ID
valueFrom:
secretKeyRef:
name: runner-01-oauth-credentials
key: oauthClientId
- name: OAUTH_CLIENT_SECRET
valueFrom:
secretKeyRef:
name: runner-01-oauth-credentials
key: oauthClientSecret
volumeMounts:
- name: tmp
mountPath: /tmp
- name: docker-containers
mountPath: /var/lib/docker/containers
readOnly: true
- name: var-run
mountPath: /var/run
- name: docker-in-docker
image: docker:20.10.7-dind
securityContext:
privileged: true
volumeMounts:
- name: tmp
mountPath: /tmp
- name: docker-containers
mountPath: /var/lib/docker/containers
- name: var-run
mountPath: /var/run
restartPolicy: OnFailure
volumes:
- name: tmp
- name: docker-containers
- name: var-run
backoffLimit: 6
completions: 1
parallelism: 1
Agora vamos aplicar as configurações construídas acima.
kubectl -n namespace apply -f secrets.yaml
kubectl -n namespace apply -f job.yaml
pipelines:
branches:
'main':
- step:
runs-on: my.custom.label
script:
- echo "Hello world"
Seu runner auto-hospedado está pronto!
Para mais informações sobre runners visite a documentação bitbucket runners.
Acesse nossa página de Contato e converse conosco.
Sucesso!