質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Q&A

2回答

772閲覧

GitHub Actionsで、変数に値を入れても取得できない

nnahito

総合スコア2006

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

0グッド

0クリップ

投稿2023/08/07 13:13

編集2023/08/07 13:13

やりたいこと

Gitで生成した最新のTag情報を取得し、変数に入れて使いまわしたい

やったこと

重要箇所のみ

以下のようなyamlを書いていますが、
変数$GITHUB_ENVLATEST_TAG=$(git describe --tags --abbrev=0)のペアを入れていると思うのですが、
入りません。

少なくとも公式はこの形式で書いていると思います。

yaml

1 steps: 2 - name: Branchのチェックアウト 3 uses: actions/checkout@v3 4 with: 5 fetch-depth: '0' 6 lfs: true 7 8 - name: 最新タグを取得 9 run: | 10 echo "LATEST_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV 11 12# --- 略 --- 13 14 - name: exeファイルをReleasesに保存 15 uses: svenstaro/upload-release-action@v2 16 with: 17 repo_token: ${{ secrets.GITHUB_TOKEN }} 18 asset_name: re_set_postgres_seq.exe 19 tag: ${{ env.LATEST_TAG}} # <---- ここで値が入っていないのでエラーになる 20 overwrite: true 21 file: re_set_postgres_seq.exe

全体のyaml

GitHub

yaml

1name: 'masterマージ時に自動でtag発行し、Nimをビルドする' 2 3# このワークフローが実行されるタイミングの定義 4on: 5 # push時に実行 6 push: 7 # 対象ブランチ 8 branches: 9 - master 10 11# GitHub Actionsで行うジョブの定義 12jobs: 13 create-new-tag: 14 # Ubuntu環境で実行 15 runs-on: ubuntu-latest 16 17 # 実際のジョブ内容を記載 18 steps: 19 - name: Branchのチェックアウト 20 uses: actions/checkout@v3 21 with: 22 fetch-depth: '0' 23 24 - name: タグの発行 25 uses: anothrNick/github-tag-action@1.64.0 26 env: 27 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 28 WITH_V: true 29 REPO_OWNER: nnahito 30 31 create-release: 32 # create-new-tagのjobが終わってから実行する 33 needs: create-new-tag 34 # Windows環境で実行 35 runs-on: windows-latest 36 37 steps: 38 - name: Branchのチェックアウト 39 uses: actions/checkout@v3 40 with: 41 fetch-depth: '0' 42 lfs: true 43 44 - name: 最新タグを取得 45 run: | 46 echo "LATEST_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV 47 48 - name: デバッグ 49 run: | 50 echo "LATEST_TAG=$(git describe --tags --abbrev=0)" 51 echo "LATEST_TAG=$LATEST_TAG" # Debug output 52 echo "LATEST_TAG=${LATEST_TAG}" # Debug output 53 echo "LATEST_TAG=${env.LATEST_TAG}" # Debug output 54 echo "LATEST_TAG=${{ env.LATEST_TAG }}" # Debug output 55 56 - name: Nimの環境準備 57 uses: jiro4989/setup-nim-action@v1 58 with: 59 nim-version: '2.0.0' 60 repo-token: ${{ secrets.GITHUB_TOKEN }} 61 62 - name: プロジェクトのビルド 63 run: nimble build -Y 64 65 - name: exeファイルをReleasesに保存 66 uses: svenstaro/upload-release-action@v2 67 with: 68 repo_token: ${{ secrets.GITHUB_TOKEN }} 69 asset_name: re_set_postgres_seq.exe 70 tag: ${{ env.LATEST_TAG }} 71 overwrite: true 72 file: re_set_postgres_seq.exe

質問

値が変数に入らないのはなぜでしょうか?
書き方が間違っている部分がありましたらご教示いただけますと幸いです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

あまくよく分かっていないのですが,

Setting an enviroment variableExample of writing an environment variable to GITHUB_ENVが参考になるのでは?

... >> "$GITHUB_ENV"の方がベター?私にはよく分かりません。

投稿2023/08/08 13:09

ujimushi_sradjp

総合スコア2179

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

公式ドキュメントに明確な記述を見つけられなかったのですが、たぶん以下のようなことです。


envコンテキストの変数には、それにアクセスできるワークフロー内のスコープからならアクセスできます。言いかたを変えると、stepsの実行より前にすでに値が決まっている変数にしかアクセスできません。

逆に、$GITHUB_ENVで設定される環境変数は、runの実行時にしかアクセスできません。個々のrunを実行するたびに、新たにシェルを起動した上でそれ以前のstepで$GITHUB_ENVに書き込んだ内容を環境変数にセットする、と考えればいいです。

runの中では、後者の環境変数にもenvコンテキストの変数としてもアクセスできます。つまりrunの中では、${{ env.変数名 }}による参照とシェル固有の環境変数への参照 (bashなら$変数名など、PowerShellなら$env:変数名など) の両方の方法が可能です。

投稿2023/08/08 03:12

ikedas

総合スコア4441

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnahito

2023/08/16 17:27

ご回答ありがとうございます。 今回の場合runではなく、「tag: ${{ env.LATEST_TAG}} # <---- ここで値が入っていないのでエラーになる」の部分で利用したいので、 「runの実行時にしかアクセスできません」ということであれば、ENVは使えないということであってますでしょうか?
ikedas

2023/08/16 22:45

「envは使えない」というのが「実現したいと思っていることをenvコンテキストを使って記述できそうにない」という意味ならそうですね。 たとえば、やりかたを変えてみては。 現在は、何かpushされるのをトリガにしていて「masterブランチにpushされたら、タグを打って、そのタグを……」となっています。 代わりに、タグを打つのをトリガにして「タグが打たれたら、そのタグを……」とすれば、タグはgithub.refで取れます (というか、upload-release-actionでのtagのデフォルト値はgithub.refです)。runの中では、タグがmasterブランチに含まれるときだけ処理を実行すればいいのでは。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問