Los runners le permiten ejecutar pipelines desde sus repositorios. Bitbucket le permite alojar estos runners en su propia infraestructura, los llamados self-hosted runners
.
En este artículo, lo guiaremos a través de cómo crear un runner autohospedado a nivel de workspace y ejecutarlo en Kubernetes.
El primer paso es crear un nuevo runner. Vamos a crearlo a nivel del workspace:
Vaya a su perfil y haga clic en el workspace que desee.
Haga clic en configuración y seleccione workspace runners.
Añadir runner.
Defina el nombre para el runner y una label. Las labels self.hosted y linux son valores predeterminados, debemos agregar una nueva label para poder identificar en el pipeline en qué runner se debe ejecutar el build, si hay otros runners creados.
Clickea en next. Se generará una salida con el siguiente 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 este comando, ya que vamos a utilizar los valores de las variables presentadas para la configuración de nuestro runner autohospedado y haga clic en finish
.
Observe que el runner se creó en el workspace, pero su estado es UNREGISTRED
. Después de configurar el runner y ejecutarlo en el entorno de Kubernetes, su estado cambiará a ONLINE
.
El siguiente paso es compilar los archivos de Kubernetes para alojar el runner.
Primero manejemos las variables dadas por el 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
Una vez hecho esto, pasamos a la etapa de construcción de los archivos de Kubernetes:
Agregue los valores de las variables:
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: En el archivo job.yaml, las variables accountUuid y runnerUuid, en la sección ‘container variables’, deben agregarse entre “ ”
y { }
, de esa 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
Ahora apliquemos las configuraciones creadas anteriormente.
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"
¡Su runner autohospedado está listo!
Para obtener más información acerca de los runners, visite la documentación de bitbucket runners.
Accede a nuestra página de Contacto y chatea con nosotros.
¡Éxito!