当前位置:首页 > 技术文章 > 正文内容

编写简单的.gitlab-ci.yml打包部署项目

服务器说明:

192.168.192.120:项目服务器

192.168.192.121:GitLab

为了可以使用gitlab的cicd功能,我们需要先安装GitLab Runner

安装GitLab Runner参考:

https://blog.csdn.net/weixin_42304232/article/details/115727182

https://docs.gitlab.cn/runner/install/linux-manually.html

安装好GitLab Runner,我们主要编写.gitlab-ci.yml

在GitLab管理员界面,找到Settings -> CI/CD -> Variables,添加STAGING_PRIVATE_KEY变量

需要在192.168.192.120服务器执行ssh-keygen生成密钥对,其中STAGING_PRIVATE_KEY的值为私钥

# 参考:https://www.dazhuanlan.com/alexleeyy/topics/979217

在192.168.192.120服务器执行下面操作:
1、ssh-keygen,不要输入密码,直接回车
2、cat ~/.ssh/id_rsa,复制私钥到STAGING_PRIVATE_KEY
3、cd /root/.ssh/ && cat id_rsa.pub >> authorized_keys, 把 ssh 公钥添加到认证授权文件,这样可以不需要输入密码

gitlab管理后台,增加变量

.gitlab-ci.yml内容:

# This file is a template, and might need editing before it works on your project.
# This is a sample GitLab CI/CD configuration file that should run without any modifications.
# It demonstrates a basic 3 stage CI/CD pipeline. Instead of real tests or scripts,
# it uses echo commands to simulate the pipeline execution.
#
# A pipeline is composed of independent jobs that run scripts, grouped into stages.
# Stages run in sequential order, but jobs within stages run in parallel.
#
# For more information, see: https://docs.gitlab.com/ee/ci/yaml/index.html#stages
#
# You can copy and paste this template into a new `.gitlab-ci.yml` file.
# You should not add this template to an existing `.gitlab-ci.yml` file by using the `include:` keyword.
#
# To contribute improvements to CI/CD templates, please follow the Development guide at:
# https://docs.gitlab.com/ee/development/cicd/templates.html
# This specific template is located at:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Getting-Started.gitlab-ci.yml
 
before_script:
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  - eval $(ssh-agent -s)
  - ssh-add <(echo "$STAGING_PRIVATE_KEY")
  - echo $STAGING_PRIVATE_KEY
 
stages:          # List of stages for jobs, and their order of execution
  - build
  - test
  - deploy
 
 
variables:
  PROJECT_NAME: ${CI_PROJECT_NAME}
  PROJECT_DIR: ${CI_PROJECT_DIR}
 
build-job:       # This job runs in the build stage, which runs first.
  stage: build
  script:
    - echo ${PROJECT_NAME}
    - echo ${PROJECT_DIR}
    - cd ${PROJECT_DIR} && cd ..
    - tar -cf "${PROJECT_NAME}.tar" ${PROJECT_NAME}
    - scp -o StrictHostKeyChecking=no project.tar root@192.168.192.120:/root/gitlab/
    - ssh -o StrictHostKeyChecking=no root@192.168.192.120 "
      cd /root/gitlab && 
      tar -xf project.tar && 
      pwd && 
      ls && 
      echo 'exit' && 
      exit
      "
    - echo "Compiling the code..."
    - echo "Compile complete."
 
unit-test-job:   # This job runs in the test stage.
  stage: test    # It only starts when the job in the build stage completes successfully.
  script:
    - echo "Running unit tests... This will take about 60 seconds."
    - sleep 60
    - echo "Code coverage is 90%"
 
lint-test-job:   # This job also runs in the test stage.
  stage: test    # It can run at the same time as unit-test-job (in parallel).
  script:
    - echo "Linting code... This will take about 10 seconds."
    - sleep 10
    - echo "No lint issues found."
 
deploy-job:      # This job runs in the deploy stage.
  stage: deploy  # It only runs when *both* jobs in the test stage complete successfully.
  environment: production
  script:
    - echo "Deploying application..."
    - echo "Application successfully deployed."

部分说明:

# 不存在ssh-agent就下载安装
'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'

# ssh-agent是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程
eval $(ssh-agent -s)

# ssh-add命令是把专用密钥添加到ssh-agent的高速缓存中,从而提高ssh的认证速度
ssh-add <(echo "$STAGING_PRIVATE_KEY")

# scp -o StrictHostKeyChecking=no,ssh -o StrictHostKeyChecking=no中的
StrictHostKeyChecking=no去掉对主机的验证检查
scp -o StrictHostKeyChecking=no project.tar root@192.168.192.120:/root/gitlab/
ssh -o StrictHostKeyChecking=no root@192.168.192.120

# 在192.168.192.120服务器执行以下命令
cd /root/gitlab && 
tar -xf project.tar && 
pwd && 
ls && 
echo 'exit' && 
exit

分支内容:

执行情况:

192.168.192.120服务器上的内容:

可能出现的报错:

https://gitlab.com/gitlab-examples/ssh-private-key/-/issues/1

参考:

https://docs.gitlab.cn/jh/ci/examples/deployment/composer-npm-deploy.html

https://gitlab.com/gitlab-org/gitlab-foss/tree/master/lib/gitlab/ci/templates

相关文章

Linux 发行版介绍 Zenwalk Linux(linux发行版2021)

Zenwalk Linux是基于Slackware的GNU/Linux发行版, 100%兼容Slackware。 致力于精简和快捷的图形桌面及多媒体使用。包含整套编程环境和运行库,还提供了常用服务器套...

2023 年 10 个最佳 Linux 桌面发行版

Linux 操作系统在桌面领域的发展已经不再被忽视,越来越多的用户正在考虑切换到 Linux 上。在 2023 年,我们可以期待更多的 Linux 桌面发行版的推出和发展。这里列举了 10 个最佳的...

Garuda Linux:现代化、注重性能与美观的Linux发行版

什么是 Garuda Linux?Garuda Linux 是一个基于 Arch Linux 的现代化、注重性能与美观的桌面操作系统。它面向对性能有较高要求的用户,尤其受到 Linux 爱好者、游戏玩...

vue:组件中之间的传值(vue组件之间传参)

一、父子组件之间的传值----props/$emit1、父组件向子组件传值--props2.子组件想父组件传值-this.$emit('select',item)二、父组件向下(深层)...

2024前端面试真题之—VUE篇(前端面试题vuex)

添加图片注释,不超过 140 字(可选)1.vue的生命周期有哪些及每个生命周期做了什么? beforeCreate是new Vue()之后触发的第一个钩子,在当前阶段data、methods、com...

Vue3,父组件子组件传值,provide(提供)和inject(注入)传值

父组件向子组件传值父子组件传递数据时,通常使用的是props和emit,父向子传递使用props,子向父传递使用emit。子组件接收3种方式// 1、简单接收 props:["title...