Gitlab----Pipline流水线语法job、script、stages、stage、before_script、after_script、variables、.pre、.post

【原文链接】Gitlab----Pipline流水线语法job、script、stages、stage、before_script、after_script、variables、.pre、.post

一、最基本的语法

  • job :流水线中额作业
  • script:执行的shell命令
  • before_script:执行script之前执行
  • after_script:在执行script之后执行
  • stages:声明步骤,决定了流水线顺序
  • stage:指明当前作业属于哪个步骤
  • variables: 定义变量

二、实例演示

在代码仓创建.gitlab-ci.yml文件,内容如下:

before_script:
  - echo "script in global before script..."

after_script:
  - echo "script in global after script..."

variables:
  USERNAME: redrose2100
  PASSWORD: admin123

stages:
  - build
  - test
  - release
  - deploy

setup:
  stage: .pre
  script:
    - echo "script in pre..."

teardown:
  stage: .post
  script:
    - echo "script in post..."

build:
  stage: build
  before_script:
    - echo "before script in build..."
    - echo $USERNAME
    - echo $PASSWORD
  script:
    - echo "script in build..."
  after_script:
    - echo "after script in build..."

test:
  stage: test
  before_script:
    - echo "before script in test..."
  script:
    - echo "script in test..."

release:
  stage: release
  script:
    - echo "script in release..."
  after_script:
    - echo "after in release..."

deploy:
  stage: deploy
  script:
    - echo "script in deploy..."

然后提交代码仓,可以得到如下流水线执行结果:

三、流水线详细解读

3.1 stages声明执行步骤

不管.gitlab-ci.yml文件中各个作业代码的顺序如何,在执行流水线的时候是按照stages声明的顺序执行,如下stages声明的步骤

stages:
  - build
  - test
  - release
  - deploy

流水线中顺序与上述声明一致

3.2 stage声明当前作业所属的步骤

如下:stage后面声明当前作业属于build步骤,作业名子可以随便定义,但是stage后的步骤名必须在上面stages中声明的,否则会报错

build:   # 这里可以随便定义
  stage: build    # 这里必须在上面stages中有声明
  before_script:
    - echo "before script in build..."
    - echo $USERNAME
    - echo $PASSWORD
  script:
    - echo "script in build..."
  after_script:
    - echo "after script in build..."

3.3 .pre和.post定义前置步骤和后置步骤

如下:stage使用.pre或.post声明,.pre表示此作业在所有作业执行之前执行,.post表示此作业在所有作业执行完成之后再执行

setup:
  stage: .pre
  script:
    - echo "script in pre..."

teardown:
  stage: .post
  script:
    - echo "script in post..."

执行的结果如下:

3.4 before_script在script执行之前执行,after_script在script执行之后执行

如下:

build:
  stage: build
  before_script:
    - echo "before script in build..."
    - echo $USERNAME
    - echo $PASSWORD
  script:
    - echo "script in build..."
  after_script:
    - echo "after script in build..."

查看流水线如下

3.5 作业中的before_script和after_script比全局的优先级高

这里是指如果作业中有before_script或者after_script,则执行作业中的before_script和after_script,如果作业中没有,则会执行全局的before_script和after_script
如下:test作业中只有before_script,没有after_script

test:
  stage: test
  before_script:
    - echo "before script in test..."
  script:
    - echo "script in test..."

查看流水线中执行结果,即执行了当前作业中的before_script,然后执行了全局的after_script

3.6 variables定义的变量在作业中均可使用

如下定义变量

variables:
  USERNAME: redrose2100
  PASSWORD: admin123

如下,在build作业中打印变量

3.7 script即执行shell命令

script即作业的核心内容,主要是通过命令行的方式调用,一般情况下runner为linux,因此这里的script的就是执行shell命令了,因此可以根据实际情况满足各种场景的需求
如下build作业,script中只是打印命令,实际场景中比如编译软件包,安装软件包,部署服务等等均可以做到

build:
  stage: build
  before_script:
    - echo "before script in build..."
    - echo $USERNAME
    - echo $PASSWORD
  script:
    - echo "script in build..."
  after_script:
    - echo "after script in build..."

build作业的执行结果:

至此,GitlabCICD的主体骨架已经具备了

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
data_dir='/public/work/Personal/wuxu/qiantao_17' for file1 in ${data_dir}/*.fasta; do for file2 in ${data_dir}/*.fasta; do if [ "$file1" != "$file2" ]; then touch snp_indel.end.sh && cat snp_indel.end.sh && \ export PATH=/public/work/Personal/pangshuai/software/conda/miniconda3/bin/:${PATH} && \ nucmer --mum -t 8 -g 1000 -p ${file1##*/}.${file2##*/}.ref_based.nucmer $file1 $file2 && \ delta-filter -1 -l 200 ${file1##*/}.${file2##*/}.ref_based.nucmer.delta > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter && \ dnadiff -d ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter -p ${file1##*/}.${file2##*/}.ref_based.nucmer && \ show-coords -rcloT ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.coords && \ show-coords -THrd ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.syri.coords && \ show-snps -ClrTH ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp && \ show-diff ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.inv && \ perl /public/work/Pipline/Structural_Variation/pipeline/2.1.1/bin/filter_the_MUmmer_SNP_file.pl ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.SNPs ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.Insertions ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.Deletions 10000000 && \ touch snp_indel.end.tmp && \ mv snp_indel.end.tmp snp_indel.end && \ sleep 10 fi done done ,增加一个判断,使/public/work/Personal/wuxu/qiantao_17路径下以.fasta结尾的文件两两一组不分前后只组合一次,然后再执行touch 后面的代码
06-03
好的,您可以将原始代码修改为以下内容: ```bash data_dir='/public/work/Personal/wuxu/qiantao_17' files=( "${data_dir}"/*.fasta ) for (( i=0; i<${#files[@]}-1; i++ )); do for (( j=i+1; j<${#files[@]}; j++ )); do file1=${files[i]} file2=${files[j]} touch snp_indel.end.sh && cat snp_indel.end.sh && \ export PATH=/public/work/Personal/pangshuai/software/conda/miniconda3/bin/:${PATH} && \ if [ "$file1" != "$file2" ]; then nucmer --mum -t 8 -g 1000 -p ${file1##*/}.${file2##*/}.ref_based.nucmer $file1 $file2 && \ delta-filter -1 -l 200 ${file1##*/}.${file2##*/}.ref_based.nucmer.delta > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter && \ dnadiff -d ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter -p ${file1##*/}.${file2##*/}.ref_based.nucmer && \ show-coords -rcloT ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.coords && \ show-coords -THrd ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.syri.coords && \ show-snps -ClrTH ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp && \ show-diff ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter > ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.inv && \ perl /public/work/Pipline/Structural_Variation/pipeline/2.1.1/bin/filter_the_MUmmer_SNP_file.pl ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.SNPs ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.Insertions ${file1##*/}.${file2##*/}.ref_based.nucmer.delta.filter.snp.Deletions 10000000 && \ touch snp_indel.end.tmp && \ mv snp_indel.end.tmp snp_indel.end && \ sleep 10 fi done done ``` 这里使用了一个数组 `files` 存储了所有以 `.fasta` 结尾的文件路径,然后使用两个 `for` 循环对其进行两两组合,并且加上了判断条件,使得每个文件只会和其他文件组合一次。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值