编程知识 cdmana.com

Docker + webhook Automation Deployment Front End Project

Préface

À l'heure actuelle, tous les déploiements de projets au sein de l'entreprise sont basés surdockerConteneur,Dans la pratique, il suffit decopy DockerfileDocumentation,Puis il y a le déploiement automatisé de l'entreprise,Projet publié surOKC'est.

Mais pour nos propres projets privés,Comment utiliserdockerEt la publication automatisée? Utilisé dans cet articledocker-webhook Construction automatiséevueProjets,Développer les idées,J'espère pouvoir communiquer ensemble.

Réalisation concrète:

  • Utiliservue-cliCréationvueProjets
  • Construction localevueMiroir du projet,pushÀdockerEntrepôt de gestion miroir(hub.docker.com),Déclencheurdocker-webhook
  • nodeSurveillance du servicedocker-webhook,Démarrage localvue-demoConteneur,Déploiement réussi
Versions connexes:

CréationvueApplication

# Création
npx @vue/cli create vue-demo
Copier le Code

Création de la racine du projetDockerfileDocumentation

# Dockerfile

# Basé surnodeMiroir
FROM node:lts-alpine AS builder  

# Création de miroirssrcTable des matières
WORKDIR /src
# Projetpackage.jsonCopie du fichier àsrcTable des matières
COPY package*.json /src
RUN npm install
COPY . /src
RUN npm run build

# Il en faut un autre.nginxMiroir,Pour déployervueProjets
FROM nginx:stable-alpine
COPY --from=builder /src/dist /usr/share/nginx/html/
Copier le Code

Création de la racine du projet.dockerignoreDocumentation

node_modules
Copier le Code

La structure actuelle du Répertoire est la suivante

Construction localevue-demoMiroir,Et démarrevue-demoProjets

docker build -t vue-demo . 
Copier le Code

docker build Pour construire un miroir
-t C'est le nom du miroir Ce nom peut être utilisé à volonté
. Est basé sur le répertoire actuelDockerfilePour construire un miroir

Après l'exécution,Exécution du terminaldocker images, On peut voir qu'il y a déjà un vue-demo Miroir

docker run -d -p 8080:80 --name vue-demo-container vue-demo  
Copier le Code

docker run Conteneur de démarrage
-d En coulisses
-p 8080:80 Pour déplacer l'hôte 8080 Port mapped to 80 Port (nginxDémarrage par défaut80Port)
--name Nom du conteneur

docker ps Les commandes peuvent voir le conteneur vue-demo-container Déjà commencé,Et ouvrehttp://localhost:8080/ Je vois.vue Le projet a été lancé

Pousser le miroir construit à docker Miroir de l'entrepôt de gestion

L'URL est hub.docker.com/

Le compte doit être créé lui - même

Connexion locale à l'entrepôt miroir

docker login -u username
Password 
Copier le Code

Push

docker tag vue-demo houhoz/vue-demo
docker push houhoz/vue-demo
Copier le Code

docker tag : Marquer le miroir local,Placer dans un entrepôt,houhoz C'est moi. hub.docker Nom d'utilisateur pour

Poussée réussie,Ouvre.hub.docker.com/, Vous pouvez voir le miroir que vous venez de créer

Créationdocker-webhook

Pour réaliserdocker Miroir poussé avec succès , Reconstruire le projet , Nous devons en créer un autre nodeServices,Pour écouterwebhookÉvénement déclencheur pour

Créer un nouveaunode-webhookProjets

npm init -y
touch index.js
Copier le Code
# index.js
const http = require('http')
const { execSync } = require('child_process')

const resolvePost = req =>
  new Promise(resolve => {
    let chunk = ''
    req.on('data', data => {
      chunk += data
    })
    req.on('end', () => {
      resolve(JSON.parse(chunk))
    })
  })

http
  .createServer(async (req, res) => {
    console.log('receive request')
    console.log(req.url)
    if (req.method === 'POST' && req.url === '/') {
      const data = await resolvePost(req)
      // À propos dewebhook Vous pouvez consulter les documents officiels  https://docs.docker.com/docker-hub/webhooks/
      // Tirez! docker Miroir
      execSync(
        `docker pull ${data.repository?.repo_name}:${data?.push_data?.tag}`,
        {
          stdio: 'inherit',
        }
      )

      // Destruction docker Conteneur
      execSync(
        `docker ps -a -f "name=^${data.repository.name}-container" --format="{{.Names}}" | xargs -r docker stop | xargs -r docker rm`,
        {
          stdio: 'inherit',
        }
      )

      // Création docker Conteneur
      execSync(
        `docker run -d -p 8080:80 --name ${data.repository.name}-container ${data.repository.repo_name}:${data?.push_data?.tag}`,
        {
          stdio: 'inherit',
        }
      )
      console.log('deploy success')
    }
    res.end('ok')
  })
  .listen(3000, () => {
    console.log('server:3000 is ready')
  })
Copier le Code

Démarrage localnode Projets node index.js

Parce quedocker-webhook Et l'accès au réseau public ,Doit être utiliséngrok Pénétration de l'Intranet

./ngrok http 3000

Et copier0280-129-227-137-235.ngrok.io Ajouter

Après, on va tester Local docker push houhoz/vue-demo, Après ça, on verra, Afficher le déploiement réussi .

Et j'ai vudocker-webhooks C'est aussi un succès

Ouvrir localhttp://localhost:8080/

image.png

版权声明
本文为[Houhoz]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/11/20211125165938379j.html

Scroll to Top