前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >应用自动化部署篇

应用自动化部署篇

作者头像
希里安
发布2023-10-30 18:31:50
3260
发布2023-10-30 18:31:50
举报
文章被收录于专栏:希里安希里安

截止昨天已经将应用容器化并部署到k8s平台上,但是每次都要手动部署肯定不现实,所以有一个可自动部署的平台或功能是很重要的,这样就能实现随时开发随时部署了。那么有什么办法可以实现自动部署呢?

自动化部署这边往高级了说就是CICD,就是持续集成和持续部署的意思,就是实现了自动化构建、测试和部署的过程,这边先了解下有哪些CI/CD工具:

1. Jenkins - 一个开源自动化服务器,可用于构建和测试您的软件项目,并将其部署到生产环境。它是一个基于Java开发的工具,可运行在服务器上,就是装好jdk,直接运行jar就可以了。

那么这里给一个部署应用到K8s的自动部署jenkinsfile文件:

代码语言:javascript
复制
pipeline {
 agent any
 stages {
 stage('Checkout') {
 steps {
 echo 'Checking out...'
 checkout scm
 }
 }
 stage('Build') {
 steps {
 echo 'Building...'
 sh 'npm install'
 }
 }
 stage('Test') {
  steps {
 echo 'Testing...'
 sh 'npm test'
 }
 }
 stage('Lint') {
 steps {
 echo 'Linting...'
 sh 'npm run lint'
 } 
 }
  stage('Build Image') {
 steps {
 echo 'Building Docker Image...' 
 sh 'docker build -t hello-world:latest .' 
 }
 }
 stage('Push Image') {
 steps {
 echo 'Pushing Docker Image...'
 sh 'docker push hello-world:latest' 
 }
 }
 stage('Deploy') {
 steps {
 echo 'Deploying...'
 sh 'kubectl apply -f deployment.yaml' 
 }
 }
 } 
}

这个流水线pipeline中主要有三个阶段:

(1)build,就是构建编译过程,安装依赖项目

(2)test,就是测试过程

(3)deploy,就是打包容器镜像,然后直接运行命令行kubectl apply来部署deployment.yaml清单文件(昨天已经编写了,直接用就行)

2. GitLab CI/CD - GitLab内置的CI/CD工具。它直接集成在GitLab中,可以自动构建、测试和部署GitLab中托管的项目也就是我们今天要介绍的工具。

步骤和jenkins都大同小异:

代码语言:javascript
复制
image: node:latest
stages:
 - install
 - test
 - lint
 - build
 - deploy
install:
 stage: install
 script:
 - npm install
test:
 stage: test
 script:
 - npm test
lint:
 stage: lint
 script:
 - npm run lint
build:
 stage: build
 script:
 - docker build -t frontend:latest .
deploy_job:
 stage: deploy
 script:
 - docker push frontend:latest
 - kubectl apply -f deployment.yaml
deploy:
 stage: deploy
 script:
- kubectl apply -f deployment.yaml

主要还是三部分:构建、测试、打包镜像部署到k8s

3. GitHub Actions - GitHub的CI/CD工具。它直接在GitHub中运行,可以自动构建、测试和部署GitHub仓库中的代码。

代码语言:javascript
复制
name: CI/CD Workflow
on: push
jobs:
 install:
 name: Install dependencies
 runs-on: ubuntu-latest
 steps:
 - name: Checkout code
 uses: actions/checkout@v2
 - name: Install npm dependencies
 run: npm install
 test:
 name: Run tests
 runs-on: ubuntu-latest
 steps:
 - name: Checkout code
 uses: actions/checkout@v2
 - name: Run tests
 run: npm test
 lint:
 name: Run linter
 runs-on: ubuntu-latest
 steps:
 - name: Checkout code
 uses: actions/checkout@v2 
 - name: Run linter
 run: npm run lint 
 build:
 name: Build docker image
 runs-on: ubuntu-latest
 steps: 
 - name: Checkout code
 uses: actions/checkout@v2 
 - name: Build docker image
 run: docker build -t frontend:latest .
 deploy:
 name: Deploy to Kubernetes
 runs-on: ubuntu-latest
 steps: 
 - name: Checkout code
 uses: actions/checkout@v2
 - name: Deploy to Kubernetes
 run: |
  docker push frontend:latest
 kubectl apply -f deployment.yaml

4. Azure Pipelines - Microsoft Azure的CI/CD工具。它可以为Azure DevOps和GitHub中的项目自动化构建、测试、部署和发布管道。

暂时没用过,就不举例了。

5. Argo CD - 一个声明式的GitOps CD工具,可以自动部署和同步储存在 GitHub、GitLab、 Bitbucket 和 Argoproj 等仓库中的kubenetesmainfest文件。和k8s联系比较紧密,可以实时监控应用程序清单文件,并自动部署到K8s集群中。大佬们都强烈建议使用Argo CD来管理K8s的应用部署。

这是一个简单的argo cd的yaml文件

代码语言:javascript
复制
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
 name: example
spec:
 project: default
 source:
 repoURL: https://github.com/argoproj/argocd-example-apps.git
 targetRevision: HEAD
 path: example
 destination:
 server: https://kubernetes.default.svc
 namespace: argocd-example-apps
 syncPolicy:
 automated: true

这里启用自动同步策略,相关清单文件一更改就会自动部署到集群。

我这边主要还是用gitlab比较多,所以看看具体在哪设置:

在这里可以找到注册gitlab-runner相关信息

如何安装gitlab-runner

可以二进制安装,也可以helm安装,直接搜索helm官方网站就可,gitlab也给出了对应不同系统的安装方式包括kubernetes。

这里我使用helm3 安装gitlabrunner,命令如上所示:

这里给下我的两种方式的ci文件

代码语言:javascript
复制
build-job: # This job runs in the build stage,
which runs first.
stage: build
script:
 -
echo "Compiling the code..."
 -
npm install
 -
npm run build
 -
docker build -t cops-fe .
 -
echo "Compile complete."
deploy-job: # This job runs in the deploy stage.
stage: deploy  # It only runs when
*both* jobs in the test stage complete successfully.
environment: kubesphere-1
script:
 -
echo "Deploying application..."
 -
kubectl apply -f cops-fe.yaml
 -
echo "Application successfully deployed."
only:
 -
master

Helm方式

yaml

代码语言:javascript
复制
image: node:latest
variables:
DOCKER_HOST: tcp://docker.example.com:2375
CI_REGISTRY: registry.example.com
CI_REGISTRY_USER: gitlab-ci-token
CI_REGISTRY_PASSWORD: $CI_JOB_TOKEN
CI_ENVIRONMENT_SLUG: production
build:
stage: build
script:
 -
npm install
 -
npm run build
 -
docker build -t $CI_REGISTRY/my-group/my-project:$CI_COMMIT_REF_SLUG .
 -
docker push $CI_REGISTRY/my-group/my-project:$CI_COMMIT_REF_SLUG
deploy:
stage: deploy
environment:
name: $CI_ENVIRONMENT_SLUG
script:
 -
helm upgrade my-release ./helm-charts --set image.tag=$CI_COMMIT_REF_SLUG
 
rollback:
stage: rollback
environment:
name: $CI_ENVIRONMENT_SLUG
script:
- helm rollback
my-release 1

这期间会遇到类似的问题:

这个错误意味着GitLab Runner没有权限创建Kubernetes Secrets,执行授权即可。

代码语言:javascript
复制
kubectl create
clusterrolebinding gitlab-runner \
 --clusterrole=cluster-admin \
 --serviceaccount=gitlab-runner:default

好了,关于自动化部署的内容今天就到这了,感兴趣的朋友别忘了点赞关注!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 希里安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档