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

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

zonemu2个月前 (07-08)技术文章30

服务器说明:

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

相关文章

Win+Ubuntu缝合怪:第三方开发者推出“Wubuntu”Linux发行版

IT之家 2 月 26 日消息,一位第三方开发者推出了一款名为“Wubuntu”的缝合怪 Linux 发行版,系统本身基于 Ubuntu,但界面为微软 Windows 11 风格,甚至存在微软 Win...

Vue3 如何实现父子组件传值?(vue父子组件传值props)

在Vue 3中,要实现父子组件传值效果主要通过props和emit两种机制来实现,下面我们就来详细介绍一下这两种机制。父组件向子组件传值propsprops是Vue组件的一种机制,主要的作用就是实现从...

【Vue3 基础】05.组件化(组件使用vuex)

这是 Vue3 + Vite + Pinia +TS + Element-Plus 实战系列文档。最近比较忙没什么时间写文章,争取早日把这个系列完结吧~生命周期和模板引用在本章之前,我们通过响应式 a...

用IDEA开发如何用Git快速拉取指定分支代码?

1,准备空的文件夹,git init2,关联远程仓库,git remote add origin gitlab地址3,拉取远程分支代码,git pull origin 远程分支名再用IDEA打开项目即...

程序员开发必会之git常用命令,git配置、拉取、提交、分支管理

整理日常开发过程中经常使用的git命令!git配置SSH刚进入项目开发中,我们首先需要配置git的config、配置SSH方式拉取代码,以后就免输入账号密码了!# 按顺序执行 git config -...

Gitlab 的使用和代码审查流程介绍

1、先简洁介绍下项目常用的信息-面板统计页面2、用户信息面板3、服务器信息4、项目信息5、重点介绍代码提交审核机制和授权合并机制开发人员推送代码的时候不能直接推送到master,否则就会报错。此时开发...