Este tutorial aborda las funciones de leverage variables y secretos en sus workflow files de GitHub. Uso de estas funciones brinda a los desarrolladores el poder de guardar valores previamente utilizados, ya sean sensibles o no, para acceso eficiente.
¿Cómo configurar variables en GitHub?
Para configurar las variables, necesitamos un nuevo workflow file, en este caso llamado variables.yml. Podemos insertar valores para un día específico de la semana o saludar a diferentes individuos utilizando environment variables. Además, podemos acceder a estas variables de dos maneras, ya sea usando el símbolo del dólar seguido del nombre de la variable o usando el context env.
name: Custom Workflow
on:
workflow_dispatch:
env:
DIA_DE_LA_SEMANA: Lunes
jobs:
Saludo_variables:
runs-on: ubuntu-latest
env:
SALUDO: Hola
steps:
- name: Echo de saludo y nombre
run: echo "${{ env.SALUDO }} ${{ env.NOMBRE }}, hoy es $DIA_DE_LA_SEMANA"
¿Qué son los Secretos en GitHub y cómo configurarlos?
En la sección de Configuración de nuestro repositorio, además de las variables, encontramos una opción para configurar los secretos. Los secretos son similares a las variables, pero suelen contener datos más sensibles, como las contraseñas de las cuentas que necesitamos para configurar una acción, o un valor de configuración que si se filtra podría poner en peligro la seguridad de nuestra aplicación o usuarios.
name: Custom Workflow Secret
on:
workflow_dispatch:
jobs:
Saludo_secretos:
runs-on: ubuntu-latest
steps:
- name: Echo de saludo con secreto
run: echo "${{ secrets.SALUDO }} ${{ secrets.NOMBRE }}, tu contraseña secreta es ${{ secrets.CONTRASEÑA }}"
¿Cómo se utilizan las Variables y Secretos en Producto?
Las variables y secretos varían en sus usos. A diferencia de los secretos, las variables son utilizadas para guardar valores que no son sensibles. Mientras tanto, los secretos resguardan información altamente sensible, como contraseñas o credenciales.
Un ejemplo real de cómo se utilizan los secretos podría ser un escenario donde necesitemos acceder a los recursos de nuestras cuentas de AWS. En tal escenario, utilizaríamos un secreto para guardar las credenciales de esas cuentas, permitiendo así un acceso seguro y sin contratiempos.
Comparto workflow para cargar un archivo html a un bucket de AWS S3
name:Upload a file to S3run-name:Learning about githubActions
on:push:branches:- master
jobs:deploy: runs-on: ubuntu-latest
steps:- uses: actions/checkout@master
- uses: jakejarvis/s3-sync-action@master
with:args:--acl public-read --follow-symlinks --delete--exclude '.git*/*'env:AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET}}AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID}}AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY}}
Genial . Esto puede ser muy util para DevPos en CI/CD Gracias.
Como puedo evitar que alguien del equipo quiera ver los SECRETS si solo necesitaría correr un workflow que llame a la variable y la muestre... usando ${{secrets.[valor buscado]}}
me contesto yo solo, no te muestra el dato en pantalla.
Les comparto el uso de variables , esto lo tengo para un repo
name: Deploy to master
run-name: Deploy to master
on:
pull_request:
types:
- closed
branches:
- master
jobs:
deploy-master-job-one:
runs-on: ubuntu-latest
if: github.event.pull_request.merged == true
steps:
- name: SSH setup and deploy
if: github.actor == ${{ vars.USER_AUTHORIZED }}
run: |
Monte este ejemplo de paso esta comentado una app que ayuda a validar la seguridad por si se suben secrets que haga la revisión
name:CI+Deploy to Serveron:push:branches:[ main ]pull_request:branches:[ main ]jobs: build-and-deploy: runs-on: ubuntu-latest
strategy:matrix: node-version:[18.x]steps:- name:Clonar repositorio
uses: actions/checkout@v3
- name:ConfigurarNode.jsuses: actions/setup-node@v3
with: node-version: ${{ matrix.node-version }}cache:'yarn'- name:Instalar dependencias
run: yarn install --frozen-lockfile
# - name:Buscar secretos en el repo
# uses: gitleaks/gitleaks-action@v2
- name:SeguridadSemgrepuses: returntocorp/semgrep-action@v1
with:config:'p/default'- name:Buscar secretos con TruffleHog(v3 via Docker)run:| docker run --rm -v ${{ github.workspace}}:/pwd trufflesecurity/trufflehog:latest \
filesystem --only-verified /pwd
- name: 🚀 Hacer deploy al servidor por SSHuses: appleboy/ssh-action@v1.0.0with:host: ${{ secrets.SSH_HOST}}username: ${{ secrets.SSH_USER}}key: ${{ secrets.SSH_KEY}}script:| echo "✅ Conexión SSH exitosa desde GitHub Actions"exportNVM_DIR="$HOME/.nvm"[-s "$NVM_DIR/nvm.sh"]&& \."$NVM_DIR/nvm.sh" nvm install && nvm use
cd /var/www/html/Torrente git pull origin main
yarn install
pm2 restart torrente-contact || pm2 start server.js--name torrente-contact
pm2 save
pm2 resurrect
name:Using variables
on: push
env:environment_var: development
token: ${{ secrets.TOKEN_TEST}}jobs:deploy_to_environment: runs-on: ubuntu-latest
steps:- name:Deploy to environment
run: echo "Deploying to ${{ env.environment_var }} environment with token ${{ env.token }}"
les comparto mi ejercicio:
name: my_secret_variable
run-name: aprendiendo variables secretas
on:[workflow_dispatch]env:current_password:12345jobs:secret_variable: runs-on: ubuntu-latest
steps:- name: my_password
run:|if[ ${{ secrets.PASSWORD}}== $current_password ]; then
echo "The $current_password is my password!"else echo "$current_password not is my password" fi
Secrets
name:Vars y Secretson: workflow_dispatch
env:fruta1:Manzanafruta2:Perafruta3:Frutillajobs:Frutas: runs-on: ubuntu-latest
steps:- name: echo frutas
run:| echo "La $fruta1 es roja, la $fruta2 es verde, la $fruta3 es roja y el ${{ vars.FRUTA4 }} es amarillo" echo "La Fruta secreta es el ${{ secrets.FRUTASECRET }} y es de color verde"
Si se tienen muchas variables de entorno delicadas podríamos correr un script que las cargue, pero esto implicaría tenerlas en el repo cargadas, es inviable (supongo, si conocen otra manera me encantaría leerla), sin embargo, para pasarlas desde SECRETS a .env si es viable esta opción.